Зацикливание в списках и назначение элемента новому списку - проводное поведение - PullRequest
0 голосов
/ 17 февраля 2019

Я перебираю список списков, и когда я добавляю элемент в массив, он добавляет каждую букву отдельно, а не слово в целом, если я не удаляю '[]' ... почему это происходит, просто любопытно?Пример:

Просто любопытно узнать, почему происходит такое поведение

def printTable(lists):
    for list in lists:
        s = []
        for item in list:
            s += item
            print(s)
        print()     


tableData = [['apples', 'oranges', 'cherries', 'banana'],
             ['Alice', 'Bob', 'Carol', 'David'],
             ['dogs', 'cats', 'moose', 'goose']]

printTable(tableData)

, вместо добавления каждого элемента в список, он добавляет каждую букву (удаляя тип данных списка, он добавляет их по буквамкак исключено) просто любопытно, почему это происходит.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Добро пожаловать в Stackoverflow.Это довольно интересный вопрос.

Ваш внешний цикл устанавливает list (кстати, плохой выбор имени, так как это также имя встроенного типа Python) для каждого подсписка по очереди, ивнутренний задает item значение каждого слова во внутреннем списке.

Если бы вы написали

s = s + item

вместо

s += item

, тогда вы бывидел исключение, вызванное выражением справа:

>>> [] + "abc"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>

TypeError: can only concatenate list (not "str") to list

Однако поведение оператора + = не совсем то же самое.В есть интересное обсуждение этого вопроса .Суть в том, что если правый оператор для += является итеративным, то интерпретатор выполняет итерацию по нему, добавляя каждый элемент в список.

Если вы просто хотите добавить каждый элемент в s список, вы должны вместо этого использовать метод append:

s.append(item)
0 голосов
/ 17 февраля 2019

вместо s += item попробуйте это:

s.append(item)

, когда вы сказали s += item, что эквивалентно s = s + item, и, конечно, s - это список, а item - это строка, ив Python строки являются итеративными, поэтому они будут выглядеть следующим образом.

посмотрите на приведенный ниже пример:

a = 'hi'
print(list(a))
['h', 'i']

, а также, как сказал @roganjosh в комментариях:

Обратите внимание, что использование list в качестве имени переменной не годится, list встроено в python.

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