2009-09-14 45 views
83

Tôi cần tạo chuỗi có n ký tự bằng 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ó? Ví dụ, tôi cần một chuỗi 10 chữ cái:Trong Python, làm cách nào để tạo chuỗi ký tự n trong một dòng mã?

string_val = 'abcdefghij' 
+16

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

+3

Trừ khi, tất nhiên, đây là bài tập về nhà. Trong trường hợp này, 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à]. –

+5

Nó 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 chiều dài n trong các kịch bản thử nghiệm của tôi. Tôi quên rằng trong Python, một char có thể được nhân với n trong đó n là một số nguyên dương để đạt được những gì tôi muốn. –

Trả lời

191

Để đơn giản lặp lại cùng một lá thư gấp 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ư n chữ thường ngẫu nhiên, nó vẫn chỉ có một dòng mã (không kể những điều khoản về nhập khẩu và xác định n):

from random import choice 
from string import lowercase 
n = 10 

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

Mười chữ thường đầu tiên là string.lowercase[:10] (nếu bạn đã nhập các module thư viện chuẩn string trước đây, tất nhiên ;-).

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

+4

Trong Python 3.1.1, đó là string.ascii_lowercase thực sự. –

+0

Yep, python 3 đã loại bỏ '.lowercase' (' ascii_lowercase' là trong Python 2 gần đây cũng như trong Python 3). –

2

Nếu bạn có thể sử dụng chữ lặp đi lặp lại, bạn có thể sử dụng * điều hành:

>>> 'a'*5 

'aaaaa' 
3

Tại sao "một dòng"? Bạn có thể vừa với bất kỳ thứ gì trên một dòng.

Giả sử bạn muốn họ bắt đầu với 'a', và tăng bởi một nhân vậ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ể điều chỉnh bất kỳ thứ gì thành một dòng, eh? Khá một yêu cầu, lại: Python :) –

+6

Gregg: Python cho phép dấu chấm phẩy là dấu phân tá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. –

+2

Bạn không thể thực hiện điều khiển dòng chảy tùy ý bằng dấu chấm phẩy.Ví dụ như các vòng lồng nhau. – recursive

3

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

'a'*10 # gives 'aaaaaaaaaa' 

nếu bạn muốn chữ liên tiếp (lên đến 26):

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

Đây có thể là một chút ra khỏi câu hỏi, nhưng đối với những người quan tâm tính ngẫu nhiên của chuỗi tạo ra, 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 theseanswersrandom.py 's nguồn cho cái nhìn sâu sắc hơn.

Các vấn đề liên quan