Trong Python, làm cách nào để tạo một chuỗi n ký tự trong một dòng mã?


148

Tôi cần tạo một chuỗi có n ký tự trong Python. Có một câu trả lời một dòng để đạt được điều này với thư viện Python hiện có không? Chẳng hạn, tôi cần một chuỗi gồm 10 chữ cái:

string_val = 'abcdefghij'

23
Để lại "trong một dòng mã" để mã hóa các cuộc thi obfuscation. Khi giải pháp cho một vấn đề được viết một cách tự nhiên là một dòng, nó sẽ là; nếu không thì không nên Sử dụng nó như một mục tiêu của riêng nó là một đường dẫn được bảo đảm đến mã khó chịu.
Glenn Maynard

3
Trừ khi, tất nhiên, đây là bài tập về nhà. Trong trường hợp đó, hãy để lại "trong một dòng mã" nhưng phải trung thực và bao gồm thẻ [bài tập về nhà].
S.Lott

5
Đây thực sự không phải là một câu hỏi bài tập về nhà, tôi chỉ cần một chuỗi n độ dài trong các kịch bản thử nghiệm của mình. Tôi quên rằng trong Python, một char có thể được nhân với n trong đó n là số nguyên dương để đạt được những gì tôi muốn.
Thierry Lam

Câu trả lời:


310

Để đơn giản lặp lại cùng một chữ cái 10 lần:

string_val = "x" * 10  # gives you "xxxxxxxxxx"

Và nếu bạn muốn một cái gì đó phức tạp hơn, như ncác chữ cái viết thường ngẫu nhiên, nó vẫn chỉ là một dòng mã (không tính các câu lệnh nhập và định nghĩa n):

from random import choice
from string import ascii_lowercase
n = 10

string_val = "".join(choice(ascii_lowercase) for i in range(n))

9

Tất nhiên, mười chữ cái viết thường là string.lowercase[:10](nếu bạn đã nhập mô-đun thư viện tiêu chuẩn stringtrước đó, dĩ nhiên ;-).

Các cách khác để "tạo một chuỗi gồm 10 ký tự": 'x'*10(tất cả mười ký tự sẽ là chữ thường xs ;-), ''.join(chr(ord('a')+i) for i in xrange(10))(mười chữ cái viết thường đầu tiên một lần nữa), v.v., v.v .-).


6
Trong Python 3.1.1, thực sự là string.ascii_lowercase.
Lasse V. Karlsen

1
Đúng, python 3 đã bị xóa .lowercase( ascii_lowercasetrong Python 2 gần đây cũng như trong Python 3).
Alex Martelli

5

nếu bạn chỉ muốn bất kỳ chữ cái:

 'a'*10  # gives 'aaaaaaaaaa'

nếu bạn muốn các chữ cái liên tiếp (tối đa 26):

 ''.join(['%c' % x for x in range(97, 97+10)])  # gives 'abcdefghij'

3

Tại sao "một dòng"? Bạn có thể phù hợp với bất cứ điều gì trên một dòng.

Giả sử bạn muốn họ bắt đầu bằng 'a' và tăng thêm một ký tự mỗi lần (với gói> 26), đây là một dòng:

>>> mkstring = lambda(x): "".join(map(chr, (ord('a')+(y%26) for y in range(x))))
>>> mkstring(10)
'abcdefghij'
>>> mkstring(30)
'abcdefghijklmnopqrstuvwxyzabcd'

2
Bạn có thể phù hợp với bất cứ điều gì vào một dòng, eh? Khá là một yêu cầu, re: Python :)
Gregg Lind

6
Gregg: Python cho phép dấu chấm phẩy dưới dạng dấu phân cách câu lệnh, vì vậy bạn có thể đặt toàn bộ chương trình trên một dòng nếu muốn.
John Millikin

2
Bạn không thể thực hiện kiểm soát luồng tùy ý bằng dấu chấm phẩy. Các vòng lặp lồng nhau chẳng hạn.
đệ quy

3

Đây có thể là một câu hỏi nhỏ, nhưng đối với những người quan tâm đến tính ngẫu nhiên của chuỗi được tạo, câu trả lời của tôi sẽ là:

import os
import string

def _pwd_gen(size=16):
    chars = string.letters
    chars_len = len(chars)
    return str().join(chars[int(ord(c) / 256. * chars_len)] for c in os.urandom(size))

Xem những câu trả lờirandom.pynguồn của nó để hiểu rõ hơn.


2

Nếu bạn có thể sử dụng các chữ cái lặp đi lặp lại, bạn có thể sử dụng *toán tử:

>>> 'a'*5

'aaaaa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.