Python'da, bir kod satırında n karakterden oluşan bir dize nasıl oluştururum?


148

Python n karakterli bir dize oluşturmak gerekiyor. Mevcut Python kütüphanesi ile bunu başarmak için tek satırlık bir cevap var mı? Örneğin, 10 harfli bir dizeye ihtiyacım var:

string_val = 'abcdefghij'

23
Gizleme yarışmalarını kodlamak için "bir kod satırında" bırakın. Bir sorunun çözümü doğal olarak bir satır olarak yazıldığında, bu olacaktır; aksi halde olmamalıdır. Kendi başına bir amaç olarak kullanmak, kötü kod için garantili bir yoldur.
Glenn Maynard

3
Tabii ki, bu ödev değildir. Bu durumda, "bir kod satırında" bırakın, ancak dürüst olun ve [ödev] etiketini ekleyin.
S.Lott

5
Bu aslında bir ev ödevi sorusu değil, sadece test senaryolarımda n uzunlukta bir diziye ihtiyacım vardı. Python'da bir karakter n ile çarpılabilir, burada n istediğimi elde etmek için pozitif bir tamsayıdır.
Thierry Lam

Yanıtlar:


310

Aynı mektubu 10 kez tekrarlamak için:

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

Ve nrastgele küçük harfler gibi daha karmaşık bir şey istiyorsanız , yine de yalnızca bir kod satırıdır (içe aktarma ifadelerini saymaz ve tanımlamaz n):

from random import choice
from string import ascii_lowercase
n = 10

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

9

İlk on küçük harf şöyledir string.lowercase[:10](standart kütüphane modülünü stringdaha önce içe aktardıysanız, elbette ;-).

"10 karakterden oluşan bir dize" oluşturmanın diğer yolları: 'x'*10(on karakterin tümü küçük harf olacaktır x;-), ''.join(chr(ord('a')+i) for i in xrange(10))(yine ilk on küçük harf), vb. ;-).


6
Python 3.1.1'de, string.ascii_lowercase aslında.
Lasse V. Karlsen

1
Evet, python 3 kaldırıldı .lowercase( ascii_lowercaseson Python 2'lerde ve Python 3'te).
Alex Martelli

5

sadece herhangi bir harf istiyorsanız:

 'a'*10  # gives 'aaaaaaaaaa'

ardışık harfler istiyorsanız (en fazla 26):

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

3

Neden "bir satır"? Her şeyi bir hatta sığdırabilirsiniz.

'A' ile başlamalarını ve her seferinde bir karakter artırmayı (> 26 sarma ile) artırmak istediğinizi varsayarsak, bir satır:

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

2
Tek bir satıra herhangi bir şey sığabilir, değil mi? Oldukça iddia, yeniden: Python :)
Gregg Lind

6
Gregg: Python noktalı virgüllere deyim sınırlayıcı olarak izin verir, böylece isterseniz bir programı bir satıra koyabilirsiniz.
John Millikin

2
Noktalı virgüllerle keyfi akış kontrolü yapamazsınız. Örneğin iç içe döngüler.
özyinelemeli

3

Bu biraz soru dışı olabilir, ancak üretilen dizenin rastgele olmasıyla ilgilenenler için cevabım şöyle olacaktır:

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

Daha fazla bilgi için bu cevaplara ve random.pykaynağına bakın.


2

Tekrarlanan harfleri kullanabiliyorsanız, *operatörü kullanabilirsiniz :

>>> 'a'*5

'aaaaa'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.