Как добавить одно значение к списку, созданному путем понимания списка в одной строке? - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь понять, возможно ли добавить одно значение к списку, созданному с помощью списка в одной строке.

Редактировать: я пытаюсь сделать это только с помощью базы python установить. Нет импорта.

Ближайший рабочий пример, который у меня есть, занимает 2 строки.

my_list = ['P' * 20 for i in range(105//20)]
my_list.append('P' * (105 % 20))

print(*my_list, sep='\n')

Я пробовал что-то вроде:

my_list = ['P' * 20 for i in range(105//20)].append('P' * (105 % 20))

print(*my_list, sep='\n')

Но это приводит к ошибке NoneType из-за на append().

Так что мне интересно, возможно ли вообще осуществить это по-другому на той же строке, что и строим список?

Ожидаемый конечный результат:

PPPPPPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPPPPPP
PPPPP

Ответы [ 2 ]

3 голосов
/ 12 февраля 2020

append не будет работать, так как он изменяет список на месте . Вы можете просто добавить их:

['P' * 20 for i in range(105//20)] + ['P' * (105 % 20)]

['PPPPPPPPPPPPPPPPPPPP',
 'PPPPPPPPPPPPPPPPPPPP',
 'PPPPPPPPPPPPPPPPPPPP',
 'PPPPPPPPPPPPPPPPPPPP',
 'PPPPPPPPPPPPPPPPPPPP',
 'PPPPP']

Хотя для того, что вы пытаетесь сделать, я бы сделал что-то вроде:

ps = 105
n = 20 
rows, r = divmod(ps, n)

['P'*n]*rows + ['P'*r]

['PPPPPPPPPPPPPPPPPPPP',
 'PPPPPPPPPPPPPPPPPPPP',
 'PPPPPPPPPPPPPPPPPPPP',
 'PPPPPPPPPPPPPPPPPPPP',
 'PPPPPPPPPPPPPPPPPPPP',
 'PPPPP']
1 голос
/ 12 февраля 2020

Вы можете взять фрагменты из строки 105 "P".

>>> [("P"*105)[i:i+20] for i in range(0, 105, 20)]
['PPPPPPPPPPPPPPPPPPPP', 'PPPPPPPPPPPPPPPPPPPP', 'PPPPPPPPPPPPPPPPPPPP', 'PPPPPPPPPPPPPPPPPPPP', 'PPPPPPPPPPPPPPPPPPPP', 'PPPPP']

Хотя, чтобы не полагаться на реализацию, создающую строку из 105 символов только один раз, вы, вероятно, должны определить ее до понимание.

ps = "P" * 105
result = [x[i:i+20] for i in range(0, 105, 20)]

Используя рецепт grouper из itertools документации , вы можете написать

result = [''.join(x) for x in grouper("P"*105, 20, '')]
...