【问题标题】:Comparing lists in python gets weird在 python 中比较列表变得很奇怪
【发布时间】:2022-08-17 16:52:05
【问题描述】:

以下代码删除列表的一个元素,然后比较两个列表并打印被删除的元素(项目#1)

old = generateList()  #same list
new = old.copy()      #same list

old.remove(\"item#1\")  #remove one of the items

for item in new:
    if item not in old:
        print(item)

#Expecting: \"item#1\"
#Getting: Nothing

问题是列表很大(1700 多个项目),上面显示的代码不起作用 我尝试切片列表(确保切片版本仍然有项目(项目#1)) 代码有 5 个元素。

old = generateList()[0:5]  #same list
new = old.copy()[0:5]      #same list

old.remove(\"item#1\")  #remove one of the items

for item in new:
    if item not in old:
        print(item)

#Expecting: \"item#1\"
#Getting: \"item#1\"

有人知道这里发生了什么吗?

  • 你能提供一个实际的数据样本而不是一些随机函数generateList()吗?
  • 您可以在此处添加列表值吗
  • 你所说的“不起作用”是什么意思?有错误吗?它什么都不打印吗?
  • 你有重复的值吗? remove 仅删除第一个匹配项。
  • “不起作用”是指它不会打印丢失的项目。引发问题的示例列表有 1700 多个元素。有没有办法让我附上它?

标签: python list


【解决方案1】:

我的猜测:您要删除的项目是重复的。

list.remove 仅删除第一个找到的项目。

例子:

old = ['A', 'B', 'C', 'A']
new = old.copy()

old.remove('A')
# ['B', 'C', 'A']

【讨论】:

    【解决方案2】:

    这很奇怪。它应该工作。提出问题时,请尝试提供最简单的工作示例和预期的输出。

    顺便说一句,这不是进行列表比较的好方法。作为参考,最好使用集合比较,这要快得多。

    result = list(set(new)-set(old))
    

    为您提供旧中不存在的新项目列表。

    【讨论】:

    • 它仍然不包含丢失的项目
    【解决方案3】:

    嗯,对我来说这很有效,这显然不是比较列表的快速方法。你generateList() 是什么功能?

    old = ["item#%s"%i for i in range(17000)]  #create a big list
    new = old.copy()      #same list
    
    old.remove("item#1")  #remove one of the items
    
    for item in new:
        if item not in old:
            print(item)
    
    item#1
    

    【讨论】:

      猜你喜欢
      • 2015-08-09
      • 1970-01-01
      • 2020-07-02
      • 2020-07-05
      • 1970-01-01
      • 2015-07-15
      • 2013-02-12
      • 1970-01-01
      相关资源
      最近更新 更多