Python 列表理解似乎不起作用

标签 python list list-comprehension

我正在尝试为 for 循环嵌套的 if 代码块实现列表理解。然而,使用传统的嵌套形式似乎有效的东西在其列表理解表示中似乎不起作用。花了相当多的时间后,我看到的是它遵循了要求的逻辑。如果还有什么我要跳过的,请告诉我。

for x in data_list:
    if x not in encoding:
        encoding.append(x)

使用列表理解

encoding = [x for x in data_list if x not in encoding]

谢谢。

最佳答案

您的问题在这里:

encoding = [x for x in data_list if x not in encoding]

你正在做的是你正在重新分配编码给这个列表理解[x for x in data_list if x not in encoding]

因此,您所做的是将编码设置为仅包含最初不在其中的元素。

你应该做的是: encoding.extend([x for x in data_list if x not in encoding])

通过这种方式,您可以使用列表理解的结果扩展列表

下面是一些测试代码:

encoding = ['a','b','c','d']
encoding2 = ['a','b','c','d']

data_list = ['a','b','c','d','d','d','e','f','g']

print(encoding)
print(encoding2)

for x in data_list:
    if x not in encoding:
        encoding.append(x)

encoding2.extend([x for x in data_list if x not in encoding2])

print(encoding)
print(encoding2)

打印:

['a', 'b', 'c', 'd']
['a', 'b', 'c', 'd']
['a', 'b', 'c', 'd', 'e', 'f', 'g']
['a', 'b', 'c', 'd', 'e', 'f', 'g']

现在,这不是一个完美的解决方案,因为如果元素多次出现在 data_list 中,它仍然会重复元素。这样做的原因是,在 for 循环示例中,encoding 在每个追加操作之后被检查,而列表理解仅基于 encoding'初始状态。因此,如果元素在 data_list 中不止一次,它将不止一次将元素插入其中。

如果你想解决这个问题,首先将列表理解转换为集合,如下所示:

encoding.extend(set([x for x in data_list if x not in encoding]))

给你!

关于Python 列表理解似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40595688/

相关文章:

python - 寻找使用循环编写此 Tkinter 代码的更简洁的方法

python - windows: python os.unlink raise OSError, [Error 5] 访问被拒绝

Python 3.3 序列 key 生成器列表问题

python - 使复杂的列表理解成为条件

python - Django:生产环境的编码问题

list - (>>) 是否应该丢弃所有左侧输出?

python - 在 Python 中,如何将列表中的所有元素添加到集合中?

Python - 用于列表理解的动态过滤器?

python - 使用列表推导式对数据帧列表中的数据帧进行编号

python - 如何获取当前类对象的引用?