【问题标题】:Not in list - List Comprehension不在列表中 - 列表理解
【发布时间】:2015-04-20 00:09:33
【问题描述】:

如何在这样的列表理解中添加条件?例如:

例如:

[dict if dict not in THIS.LIST for dict in tempList]

【问题讨论】:

  • 别担心,兄弟。我已经把截图发给你的教授了。
  • 就问题的一部分寻求帮助并不等同于寻求问题的解决方案。当它是一个更大的问题的一部分时,这与在创建列表理解时寻求帮助是一样的。我只是撤消帖子上的删除。我只是不喜欢在我提出的问题中看到它,因为我知道有人粗鲁到可以用粗俗的谩骂来回应而不是正确的回应。
  • 我指的是你删除的问题,而不是这个问题。您甚至发布了问题的来源。它来自一个名为 quiz #4 的 pdf。在顶部,它提到了一份你们都签署的学术诚信声明(大概是在课堂上)。您在 stackoverflow 上寻求有关该问题的帮助。这在我看来像是一个明目张胆的作弊例子。别担心,我实际上并没有给你的教授发电子邮件。以后,请尊重课堂上的其他学生,不要尝试向 stackoverflow 社区寻求帮助,特别是针对您的评分测验中的问题。

标签: python list for-loop list-comprehension


【解决方案1】:

你的顺序错了,把 if 移到最后。

[dict for dict in tempList if dict not in THIS.LIST ]

使用你的方法 python 需要一个 else:

[dict if dict not in THIS.LIST else whatever for dict in tempList]

如果您想引用您正在创建的实际列表,请使用 for 循环,如果项目是可散列的,您可以使用一个集合来检查该元素是否已经通过 0(1) 查找看到,但如果您有 dicts 然后您将无法直接使用带有 dict 的集合:

res = [] 
for dct in temp_list:
    if dct not in res:
        res.append(dct)

或使用列表组合的类似方法,检查从列表开始到当前索引:

print([dct for ind, dct in enumerate(temp_list) if dct not in temp_list[:ind]])

如果您只想删除重复的字典,我们可以使用 dict.items:

temp_list = [ {1:2},{1:2}]
print([dict(items) for items in set(tuple(dct.items()) for dct in temp_list) ])

或使用OrderedDict 保持秩序:

from collections import OrderedDict
temp_list = [ {1:2},{1:2}]

print(list(OrderedDict(((tuple(dct.items()),dct) for dct in temp_list)).values()))

或者再次使用正常循环:

temp_list = [ {1:2},{1:2}]
seen = set()
out = []
for dct in temp_list:
    tup = tuple(dct.items())
    if tup not in seen:
        out.append(dct)
        seen.add(tup)
print(out)

【讨论】:

  • 如果你想引用由理解本身创建的列表怎么办?
  • @Xari 列表理解没有干净的方法可以做到这一点。您可以通过一些谷歌搜索找到 hacky、特定于实现的方法,但坦率地说,您通常不应该这样做。使用不同的数据结构,例如 setfor 循环。
  • 啊,你想在添加项目时检查当前列表吗?您不能使用列表组合来做到这一点。你需要一个普通的循环附加和检查,如果你在列表中有实际的字典,你不能使用集合。
猜你喜欢
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 2019-11-06
相关资源
最近更新 更多