【问题标题】:Comparing nested list Python比较嵌套列表Python
【发布时间】:2016-09-12 22:02:30
【问题描述】:

我想代码最容易解释我的目标......

list1 = [("1", "Item 1"), ("2", "Item 2"), ("3", "Item 3"), ("4", "Item 4")]
list2 = [("1", "Item 1"), ("2", "Item 2"), ("4", "Item 4")]

newlist = []

for i,j in list1:
    if i not in list2[0]:
        entry = (i,j)
        newlist.append(entry)

print(newlist)

如果我们调用嵌套元组 [i][j]

我想比较 [i] 但一旦完成,我想保留相应的 [j] 值。

我在互联网上找到了很多关于嵌套元组的信息,但大多数都是指查找特定项目。

我最近确实使用了下面的一个表达式,效果很好,这看起来很相似,但它不会发挥作用。

for i,j in highscores:
    print("\tPlayer:\t", j, "\tScore: ", i)

任何帮助将不胜感激。

【问题讨论】:

  • 不幸的是,代码没有解释你要做什么:-)。你想从中得到什么?
  • 这很难描述......我想比较嵌套序列的第一个。即我希望它注意到在 list1: "3" 中没有出现。但我希望与它嵌套的项目也被保留。简而言之,我希望 newlist 包含 [("3", "Item 3")]
  • 我不怀疑。但是,如果我们无法说出您的要求,就很难给您建议。让我们从简单的开始。鉴于上面的list1list2,你想在一切都完成后在newlist 中做什么?
  • 抱歉 - 我按回车键,但没有意识到发布后不会返回

标签: python list nested


【解决方案1】:

如果我从您的评论中理解正确,您想将其作为新列表:

newlist = [("3", "Item 3")]

您可以这样做:

1) 列表理解:

newlist = [item for item in list1 if item not in list2]
print newlist

这会给你一个结果:

[('3', 'Item 3')]

2) 你也可以使用symmetric difference 喜欢:

L = set(list1).symmetric_difference(list2)
newlist = list(L)
print newlist

这也会给你同样的结果!

3) 最后你可以使用如下的 lambda 函数:

unique = lambda l1, l2: set(l1).difference(l2)
x = unique(list1, list2)
newlist = list(x)

这也会产生相同的结果!

4) 哦,最后但同样重要的是,使用简单的集合属性:

newlist = list((set(list1)-set(list2)))

【讨论】:

  • 哇!是的,完全正确。这可能需要一段时间才能让我明白。但效果很好!
  • 我能问一下为什么'item for item'会在开头重复吗?
  • @Jup,刚刚用第二种方法更新了答案,这可能更容易一些!希望对您有所帮助!
  • @Jup,第二个项目的存在只是为了定义该项目引用-是 list1 的成员,这只是理解列表的工作方式(语法上)。互联网上有很多关于他们的工作人员,这是一个非常有趣的话题。
【解决方案2】:

如果您只想比较列表的第一个元素,我认为您只想创建一组 list2 的第一个元素。

newlist = []
list2_keys = set(elem[0] for elem in list2)
for entry in list1:
    if entry[0] not in list2_keys:
        newlist.append(entry)

【讨论】:

  • 这个和前面的答案最大的不同是它只比较元组的第一个元素。另一个答案比较整个元组。
猜你喜欢
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 2022-11-21
  • 1970-01-01
相关资源
最近更新 更多