конкатенация списка Python с использованием функции добавления - PullRequest
3 голосов
/ 23 апреля 2019

Я только что понял проблему, когда я пытаюсь использовать «+» в ситуации конкатенации списка.

Например, я могу сделать:

print([[1] + [5]* n for n in range(1, 4)])
>>> [[1, 5], [1, 5, 5], [1, 5, 5, 5]]

Но если я переключу последовательность добавления функции:

print([[5] * n for n in range(1, 4) + [1]])

Я не получу:

>>> [[5, 1], [5, 5, 1], [5, 5, 5, 1]]

Вместо этого я получил: TypeError: unsupported operand type(s) for +: 'range' and 'list'

Есть ли способ заставить его работать?

Ответы [ 3 ]

4 голосов
/ 23 апреля 2019

Вы делаете эту операцию:

range(1, 4) + [1]

Что ничего не значит в этом случае.

Вы должны сделать + [1] сразу после [5] * n как в:

print([[5]*n+[1] for n in range(1, 4)])
1 голос
/ 23 апреля 2019

Вы должны добавить его в список, которым вы манипулируете, а не в диапазон, который вы просматриваете. Кроме того, если вы либо выполните сложение, то умножение (здесь мы делаем умножение, затем сложение), вам придется заключить в себе первый оператор, поскольку Python упорядочивает операции в соответствии с приоритетом оператора :

print([[5] * n + [1] for n in range(1, 4)])
0 голосов
/ 23 апреля 2019

Это поможет, так как участники уже ответили

[[5] * n + [1] for n in range(1, 4)]

Но в вашем решении тип диапазона (1, 4) будет , если вы хотите сделать какой-то списокоперации над ним как конкатенация, то вы должны сделать так:

list(range(1, 4)) + [1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...