Метод расширения Python для списков разлагает элементы первого списка на второй - PullRequest
0 голосов
/ 26 ноября 2018

Очевидно, у меня проблема с моим кодом.Я запускаю приведенный ниже модуль с Python 3.6.6 Shell.Я хочу проверить, есть ли элементы размера 4 в списке a_list и скопировать их в b_list .Существует только один такой элемент («3m7n»), но он разлагается на 4 других («3», «m», «7», «n»).Почему?

a_list = ['2', '3m7n', '3', '17', None]  
b_list = ['bat', 'zoo', 'next', 'pina', 'pinta']  
for i in a_list:  
    if i==None:
        pass  
    elif len(i)==4:  
        b_list.extend(i)  
b_list  
['bat', 'zoo', 'next', 'pina', 'pinta', '3', 'm', '7', 'n']

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

append добавляет объект в конец списка, так как список является изменяемым типом данных, который вы можете добавить в конец списка.extend добавляет каждый элемент итерируемого в конец списка.

Ошибка, которую вы делаете, заключается в расширении списка с помощью последовательности str, если вы хотите добавить объект, используйте append:

a = ['2', '3m7n', '3', '17']
b = ['bat', 'zoo', 'next']

for i in a:
    if len(i) == 4:
        b.append(i)

b
['bat', 'zoo', 'next', '3', 'm', '7', 'n']

Ошибка, которую вы сделали с помощью extend, - это то, где вырасширил список строкой, которая затем обрабатывает его как итеративный и проходит через каждый символ строки, как например for i in '3m7n': print(i).Используя тот же контекст, но преобразуя каждый элемент в цикле в list, вы добавляете каждый элемент в список extends:

a = ['2', '3m7n', '3', '17']
b = ['bat', 'zoo', 'next']

for i in a:
    if len(i) == 4:
        b.extend([i])

b
>>['bat', 'zoo', 'next', '3m7n']

Ради простоты, читабельности и немного большей эффективностиВы можете использовать понимание списка для замены цикла for:

b.extend([i for i in a if len(i) == 4 ])

И если вы наблюдаете, он работает точно так же, как цикл for, расширяя список объектом списка.

0 голосов
/ 26 ноября 2018

extend ожидает список append ожидает элемент

a_list = ['2', '3m7n', '3', '17']
b_list = ['bat', 'zoo', 'next']

b_list.extend([i for i in a_list if len(i) == 4 ])
print(b_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...