列表的Python扩展方法将第一个列表的元素分解为第二个列表

2024-09-28 21:21:38 发布

您现在位置:Python中文网/ 问答频道 /正文

显然,我的代码有问题。我用python3.6.6shell运行下面的模块。我想检查lista\u list上是否存在大小为4的元素,并将它们复制到b\u 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']

enter image description here


Tags: 模块代码innone元素forifpass
2条回答

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)

append将对象添加到列表的末尾,因为列表是可变的数据类型,所以可以附加到列表的末尾。extend将iterable中的每个元素添加到列表的末尾。你知道吗

您犯的错误是使用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时出现的错误是,使用字符串扩展列表,然后将其视为iterable并遍历字符串的每个字符,类似于for i in '3m7n': print(i)。使用相同的上下文,但将循环中的每个项转换为list,可以使用extend添加列表中的每个项:

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循环完全相同,通过使用list对象扩展列表。你知道吗

相关问题 更多 >