Dengan Python, bagaimana cara membuat string karakter n dalam satu baris kode?

148

Saya perlu membuat string dengan n karakter dalam Python. Apakah ada jawaban satu baris untuk mencapai ini dengan perpustakaan Python yang ada? Sebagai contoh, saya perlu string 10 huruf:

string_val = 'abcdefghij'
Thierry Lam
sumber
23
Biarkan "dalam satu baris kode" ke kontes kode kebingungan. Ketika solusi untuk masalah secara alami ditulis sebagai satu baris, itu akan menjadi; kalau tidak seharusnya tidak. Menggunakannya sebagai tujuan sendiri adalah jalur yang dijamin ke kode jahat.
Glenn Maynard
3
Kecuali, tentu saja, ini adalah pekerjaan rumah. Dalam hal ini, biarkan "dalam satu baris kode" tetapi jujur ​​dan sertakan tag [pekerjaan rumah].
S.Lott
5
Ini sebenarnya bukan pertanyaan pekerjaan rumah, saya hanya membutuhkan string n panjang dalam skrip pengujian saya. Saya lupa bahwa dengan Python, char dapat dikalikan dengan n di mana n adalah bilangan bulat positif untuk mencapai apa yang saya inginkan.
Thierry Lam

Jawaban:

310

Untuk hanya mengulangi huruf yang sama 10 kali:

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

Dan jika Anda menginginkan sesuatu yang lebih kompleks, seperti nhuruf kecil acak, itu masih hanya satu baris kode (tidak termasuk pernyataan impor dan mendefinisikan n):

from random import choice
from string import ascii_lowercase
n = 10

string_val = "".join(choice(ascii_lowercase) for i in range(n))
Eli Courtwright
sumber
9

Sepuluh huruf kecil pertama adalah string.lowercase[:10](jika Anda telah mengimpor modul perpustakaan standar stringsebelumnya, tentu saja ;-).

Cara lain untuk "membuat string 10 karakter": 'x'*10(semua sepuluh karakter akan menjadi huruf kecil xs ;-), ''.join(chr(ord('a')+i) for i in xrange(10))(sepuluh huruf kecil pertama lagi), dll, dll ;-).

Alex Martelli
sumber
6
Dalam Python 3.1.1, sebenarnya string.ascii_lowercase.
Lasse V. Karlsen
1
Yap, python 3 dihapus .lowercase( ascii_lowercasedalam Python 2 terbaru dan Python 3).
Alex Martelli
5

jika Anda hanya menginginkan surat:

 'a'*10  # gives 'aaaaaaaaaa'

jika Anda ingin huruf berurutan (hingga 26):

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

Kenapa "satu baris"? Anda dapat memasukkan apa pun ke dalam satu baris.

Dengan asumsi Anda ingin mereka memulai dengan 'a', dan naik satu karakter setiap kali (dengan pembungkus> 26), inilah sebuah baris:

>>> mkstring = lambda(x): "".join(map(chr, (ord('a')+(y%26) for y in range(x))))
>>> mkstring(10)
'abcdefghij'
>>> mkstring(30)
'abcdefghijklmnopqrstuvwxyzabcd'
John Millikin
sumber
2
Anda dapat memasukkan apa pun menjadi satu baris, eh? Cukup klaim, re: Python :)
Gregg Lind
6
Gregg: Python memungkinkan titik koma sebagai pembatas pernyataan, sehingga Anda dapat meletakkan seluruh program pada satu baris jika diinginkan.
John Millikin
2
Anda tidak dapat melakukan kontrol aliran sewenang-wenang dengan titik koma. Loop bersarang misalnya.
rekursif
3

Ini mungkin sedikit keluar dari pertanyaan, tetapi bagi mereka yang tertarik pada keacakan string yang dihasilkan, jawaban saya adalah:

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))

Lihat jawaban ini dan sumber untuk informasi lebih lanjut.random.py

foufou
sumber
2

Jika Anda dapat menggunakan huruf yang diulang, Anda dapat menggunakan *operator:

>>> 'a'*5

'aaaaa'
Fragsworth
sumber