В Python, как мне создать строку из n символов в одной строке кода?
148
Мне нужно сгенерировать строку с n символов в Python. Есть ли однострочный ответ для достижения этого с существующей библиотекой Python? Например, мне нужна строка из 10 букв:
Оставьте "в одной строке кода", чтобы закодировать конкурсы запутывания. Когда решение проблемы естественно записывается одной строкой, оно будет; в противном случае это не должно быть. Использование его в качестве цели само по себе является гарантированным путем к неприятному коду.
Гленн Мейнард
3
Если, конечно, это домашнее задание. В этом случае оставьте «в одной строке кода», но будьте честны и добавьте тег [homework].
S.Lott
5
На самом деле это не домашнее задание, мне просто нужна строка длины n в моих тестовых скриптах. Я забыл, что в Python символ может быть умножен на n, где n - положительное целое число, чтобы достичь того, что я хочу.
И если вы хотите что-то более сложное, например nслучайные строчные буквы, это всего лишь одна строка кода (не считая операторов импорта и определения n):
from random import choice
from string import ascii_lowercase
n =10
string_val ="".join(choice(ascii_lowercase)for i in range(n))
Первые десять строчных букв string.lowercase[:10](если вы импортировали стандартный модуль библиотеки stringранее, конечно ;-).
Другие способы «сделать строку из 10 символов»: 'x'*10(все десять символов будут строчными xs ;-), ''.join(chr(ord('a')+i) for i in xrange(10))(снова первые десять строчных букв), и т. Д. И т. Д. ;-).
Почему "одна линия"? Вы можете разместить что угодно на одной линии.
Предполагая, что вы хотите, чтобы они начинались с 'a' и увеличивались на один символ каждый раз (с переносом> 26), вот строка:
>>> mkstring =lambda(x):"".join(map(chr,(ord('a')+(y%26)for y in range(x))))>>> mkstring(10)'abcdefghij'>>> mkstring(30)'abcdefghijklmnopqrstuvwxyzabcd'
Вы можете поместить что-нибудь в одну строку, а? Довольно претензия, 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источник для более глубокого понимания.
Ответы:
Чтобы просто повторить одну и ту же букву 10 раз:
И если вы хотите что-то более сложное, например
n
случайные строчные буквы, это всего лишь одна строка кода (не считая операторов импорта и определенияn
):источник
Первые десять строчных букв
string.lowercase[:10]
(если вы импортировали стандартный модуль библиотекиstring
ранее, конечно ;-).Другие способы «сделать строку из 10 символов»:
'x'*10
(все десять символов будут строчнымиx
s ;-),''.join(chr(ord('a')+i) for i in xrange(10))
(снова первые десять строчных букв), и т. Д. И т. Д. ;-).источник
.lowercase
(ascii_lowercase
есть в последних версиях Python 2, а также в Python 3).если вы просто хотите какие-либо буквы:
если вам нужны последовательные буквы (до 26):
источник
Почему "одна линия"? Вы можете разместить что угодно на одной линии.
Предполагая, что вы хотите, чтобы они начинались с 'a' и увеличивались на один символ каждый раз (с переносом> 26), вот строка:
источник
Это может быть немного не вопрос, но для тех, кто интересуется случайностью генерируемой строки, мой ответ будет таким:
Смотрите эти ответы и
random.py
источник для более глубокого понимания.источник
Если вы можете использовать повторяющиеся буквы, вы можете использовать
*
оператор:источник