В Python, как мне создать строку из n символов в одной строке кода?

148

Мне нужно сгенерировать строку с n символов в Python. Есть ли однострочный ответ для достижения этого с существующей библиотекой Python? Например, мне нужна строка из 10 букв:

string_val = 'abcdefghij'
Тьерри Лам
источник
23
Оставьте "в одной строке кода", чтобы закодировать конкурсы запутывания. Когда решение проблемы естественно записывается одной строкой, оно будет; в противном случае это не должно быть. Использование его в качестве цели само по себе является гарантированным путем к неприятному коду.
Гленн Мейнард
3
Если, конечно, это домашнее задание. В этом случае оставьте «в одной строке кода», но будьте честны и добавьте тег [homework].
S.Lott
5
На самом деле это не домашнее задание, мне просто нужна строка длины n в моих тестовых скриптах. Я забыл, что в Python символ может быть умножен на n, где n - положительное целое число, чтобы достичь того, что я хочу.
Тьерри Лэм
обратитесь к этому stackoverflow.com/a/3391106/3779480
DigviJay Patil

Ответы:

310

Чтобы просто повторить одну и ту же букву 10 раз:

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

И если вы хотите что-то более сложное, например nслучайные строчные буквы, это всего лишь одна строка кода (не считая операторов импорта и определения n):

from random import choice
from string import ascii_lowercase
n = 10

string_val = "".join(choice(ascii_lowercase) for i in range(n))
Эли Кортрайт
источник
9

Первые десять строчных букв string.lowercase[:10](если вы импортировали стандартный модуль библиотеки stringранее, конечно ;-).

Другие способы «сделать строку из 10 символов»: 'x'*10(все десять символов будут строчными xs ;-), ''.join(chr(ord('a')+i) for i in xrange(10))(снова первые десять строчных букв), и т. Д. И т. Д. ;-).

Алекс Мартелли
источник
6
В Python 3.1.1 это на самом деле string.ascii_lowercase.
Лассе В. Карлсен
1
Да, Python 3 удален .lowercase( ascii_lowercaseесть в последних версиях Python 2, а также в Python 3).
Алекс Мартелли
5

если вы просто хотите какие-либо буквы:

 'a'*10  # gives 'aaaaaaaaaa'

если вам нужны последовательные буквы (до 26):

 ''.join(['%c' % x for x in range(97, 97+10)])  # gives 'abcdefghij'
Питер
источник
3

Почему "одна линия"? Вы можете разместить что угодно на одной линии.

Предполагая, что вы хотите, чтобы они начинались с 'a' и увеличивались на один символ каждый раз (с переносом> 26), вот строка:

>>> mkstring = lambda(x): "".join(map(chr, (ord('a')+(y%26) for y in range(x))))
>>> mkstring(10)
'abcdefghij'
>>> mkstring(30)
'abcdefghijklmnopqrstuvwxyzabcd'
Джон Милликин
источник
2
Вы можете поместить что-нибудь в одну строку, а? Довольно претензия, re: Python :)
Грегг Линд
6
Грегг: Python допускает использование точек с запятой в качестве разделителей операторов, поэтому при желании вы можете поместить всю программу в одну строку.
Джон Милликин
2
Вы не можете сделать произвольное управление потоком через точку с запятой. Вложенные циклы например.
рекурсивный
3

Это может быть немного не вопрос, но для тех, кто интересуется случайностью генерируемой строки, мой ответ будет таким:

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

Смотрите эти ответы и random.pyисточник для более глубокого понимания.

foudfou
источник
2

Если вы можете использовать повторяющиеся буквы, вы можете использовать *оператор:

>>> 'a'*5

'aaaaa'
Fragsworth
источник