我正在尝试为 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/