【问题标题】:iterate and compare two lists in python在python中迭代和比较两个列表
【发布时间】:2021-06-16 14:56:06
【问题描述】:

我对编码和 python 还是很陌生,所以我不确定迭代和比较两个列表的最佳方法是什么。

  • 如果 list2 的名字、姓氏和 id 与 list1 不同,则追加到从 list2 到 list1 的行。
  • 如果 list2 的名字、姓氏和 id 与 list1 相同,则追加到现有行。

以下是我目前所拥有的...我无法确定将新行附加到 list1 的部分。

list1 = [["John","Smith","ID100",1000.00,50000.00],
     ["Jane","Doe","ID200",2000.00,30000.00],
     ["Joe","Dirt","ID300",20000.00,300000.00]]

list2 = [["John","Smith","ID100",23222.00,123444.00],
     ["Jane","Doe","ID200",65000,70098.00],
     ["Dale","Wright","ID400",25000.00,126000.00],
     ["John","Clark","ID500",23002.00,12111.00]]

for i in range(len(list1)):
    for j in range(len(list2)):
        if list1[i][0] == list2[j][0] and list1[i][1] == list2[j][1] and list1[i][2] == list2[j][2]:       
            count4=3
            for k in range(len(list2[0][3:])):
                list1[i].append(list2[j][count4])
                count4+=1
        else:
            list1.append(list2[i])

print(list1)

结果:

[['John', 'Smith', 'ID100', 1000.0, 50000.0, 23222.0, 123444.0], 
 ['Jane', 'Doe', 'ID200', 2000.0, 30000.0, 65000, 70098.0], 
 ['Joe', 'Dirt', 'ID300', 20000.0, 300000.0], 
 ['John', 'Smith', 'ID100', 23222.0, 123444.0], 
 ['John', 'Smith', 'ID100', 23222.0, 123444.0], 
 ['John', 'Smith', 'ID100', 23222.0, 123444.0], 
 ['Jane', 'Doe', 'ID200', 65000, 70098.0], 
 ['Jane', 'Doe', 'ID200', 65000, 70098.0], 
['Jane', 'Doe', 'ID200', 65000, 70098.0], 
['Dale', 'Wright', 'ID400', 25000.0, 126000.0], 
['Dale', 'Wright', 'ID400', 25000.0, 126000.0], 
['Dale', 'Wright', 'ID400', 25000.0, 126000.0], 
['Dale', 'Wright', 'ID400', 25000.0, 126000.0]]

我想要的结果...

[['John','Smith','ID100',1000.00,50000.00,23222.00,123444.00],
['Jane','Doe','ID200',2000.00,30000.00,65000,70098.00],
['Joe','Dirt','ID300',20000.00,300000.00],
['Dale','Wright','ID400',25000.00,126000.00],
['John','Clark','ID500',23002.00,12111.00]]

【问题讨论】:

  • 可能是一些混乱的根源; [] 创建一个列表(您想要的语法),而{} 创建一个空字典,{1} 创建一个包含1 的集合
  • 请修正您的列表括号。你有列表[[]] 还是字典{}?
  • 看代码好像你需要一个嵌套列表。 list1 = [[John,Smith,ID100,1000.00,50000.00], [Jane,Doe,ID200,2000.00,30000.00], [Joe,Dirt,ID300,20000.00,300000.00]]
  • 另外:这甚至没有运行 - 大量的 NameErrors 因为你错过了所有的字符串分隔符!更多错误,因为您还错过了一些逗号。不要发布你没有实际执行的代码——你在浪费我们和你的时间。
  • 请发布与您发布的结果相对应的代码。

标签: python python-3.x


【解决方案1】:

您可以执行以下操作以获得所需的结果。
我正在使用 dict 来跟踪 (Fname, Lname, ID) 作为键的唯一元组,并且该值将默认为一个空列表,并且我会在遇到具有相同键的行时添加所需的数据。这可以使用setdefault 和extend 函数有效地完成。检查下面的代码:

list1 = [["John","Smith","ID100",1000.00,50000.00],
        ["Jane","Doe","ID200",2000.00,30000.00],
        ["Joe","Dirt","ID300",20000.00,300000.00]]

list2 = [["John","Smith","ID100",23222.00,123444.00],
        ["Jane","Doe","ID200",65000,70098.00],
        ["Dale","Wright","ID400",25000.00,126000.00],
        ["John","Clark","ID500",23002.00,12111.00]]

temp = dict()

for entry in (list1+list2):
    temp.setdefault(tuple(entry[:3]), []).extend(entry[3:])

res = []
for i, j in temp.items():
    res.append(list(i)+j)
print(res)

输出:

[['John', 'Smith', 'ID100', 1000.0, 50000.0, 23222.0, 123444.0],
 ['Jane', 'Doe', 'ID200', 2000.0, 30000.0, 65000, 70098.0], 
 ['Joe', 'Dirt', 'ID300', 20000.0, 300000.0], 
 ['Dale', 'Wright', 'ID400', 25000.0, 126000.0], 
 ['John', 'Clark', 'ID500', 23002.0, 12111.0]]

【讨论】:

    【解决方案2】:

    在if 语句中,您将list2[i] 添加到list1,但您必须将list2[j] 添加到list1:

    ...
    else
        list1.append(list2[i])
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多