【问题标题】:How to compare two lists in python with the if loc condition如何将python中的两个列表与if loc条件进行比较
【发布时间】:2022-01-17 16:47:05
【问题描述】:

我有两个列表,我需要按以下方式比较这两个列表

import sys
name_1=['mahesh','karthik','nani','Karun']
name_2 = ['mahesh','karthik','','Karun','mari']

list_match = []
counter = 0
for i in name_2:  
    try: 
        if i in name_1:
            pass
        else:
            list_match.append(i)
            counter = counter + 1

            print(f"'{list_match[0]}' is missing")
    
    except Exception as e:
        print(e)

    if counter > 0:
        sys.exit()

输出获取:

   unnamed :3 is missing

预期输出:

   Nani is extra column        

【问题讨论】:

  • 你永远不会向list_match添加任何东西
  • 我已添加更改
  • 您需要遍历更大的列表,即在示例中将 name_2 替换为 name_1,将 name_1 替换为 name_2

标签: python python-3.x list python-2.7 listview


【解决方案1】:

第一件事,你错过了一个相等的和加上第二个列表的两个元素之间的空白空间。 其次,根据您的脚本,您永远不会得到预期的输出。 那是因为“Nani”仅在第一个列表中,而不在第二个列表中,但是,由于您正在迭代第二个列表,您永远不会知道 Nani 仅在 name_1 中。 如果任务是检测第二个列表中缺失的元素,但存在于第一个列表中,则需要遍历 name_1,如下所示(我使用与您相同的样式):

name_1 = ['mahesh','karthik','nani','Karun', 'mari']
name_2 = ['mahesh','karthik','Karun']

list_match = []
non_match = []
for i in name_1:
    try: 
        if i not in name_2:
            non_match.append(i)
            print(f"'{i}' is missing")
            break
        else:
            list_match.append(i)
    except Exception as e:
        print(e)

程序在第一次检测到缺失元素时结束。要在每次评估缺失元素后终止程序,请注释 break 指令。 我不太了解变量 non_match 的存在以及 list_match 的存在,因为您没有使用它们。我还在第一个“if 语句”中用“break”替换了最后一个“if 语句”。

获取缺失元素的更简单方法是将两个列表视为集合并获取它们之间的差异,如下所示:

name_1 = ['mahesh','karthik','nani','Karun', 'mari']
name_2 = ['mahesh','karthik','Karun']

name_1 = set(name_1)
name_2 = set(name_2)

print("missing elements in the second list:\n", list(name_1 - name_2))

如果你颠倒减法的顺序,你会得到第一个列表中缺失的元素。

如果任务是获取两个列表中缺少的元素,你可以试试这个:

name_1 = ['mahesh','karthik','nani','Karun', 'mari']
name_2 = ['mahesh','karthik','Karun', 'Aldo']

name_1 = set(name_1)
name_2 = set(name_2)

print("mismatched elements:\n", list(name_1.symmetric_difference(name_2)))

编辑 根据新请求,代码如下:

name_1 = ['mahesh','karthik','nani','Karun']
name_2 = ['mahesh','karthik','','Karun','mari']

list_match = []

i = 0
while i < len(name_2):
    if not name_2[i]:
        print("empty element founded in position ", i)
    elif name_2[i] not in name_1:
        print(f"'{name_2[i]}' is extra column in position ", i)
        #break
    else:
        list_match.append(i)
    i+=1

输出:

empty element founded in position  2
'mari' is extra column in position  4

在第一次不匹配后从中断中删除注释以结束程序。

编辑 x2 RIEDITED 如果你想要这种输出:

nani  is missing in position  2
'mari' is extra column in position  4
'nani' is extra column in position  2

如果你需要使用列表,你可以试试这个(但我强烈建议使用集合)

name_1=['mahesh','karthik','nani','Karun']
name_2 = ['mahesh','karthik','','Karun','mari']

list_match = []

i = 0
while i < len(name_2):
    if not name_2[i]:
        print(name_1[i]," is missing in position ", i)
    elif name_2[i] not in name_1:
        print(f"'{name_2[i]}' is extra column in position ", i)
        #break
    else:
        list_match.append(name_2[i])
    i+=1

for el in name_1:
    if el not in list_match:
        print(f"'{el}' is extra column in position ", name_1.index(el))

编辑 x3

试试这个

name_1 = ['mahesh','karthik','nani','Karun']
name_2 = ['mahesh','karthik','','Karun','mari']

i = 0
list_match = []
while i<len(name_2):
    if not name_2[i]:
        print(name_1[i], " is missing in position ", i)
    elif name_2[i] in name_1:
        list_match.append(name_2[i])
    i+=1

for el in name_1:
    if el not in list_match:
        print(el, " is extra column")

如果你需要的输出是这个:

nani  is missing in position  2
nani  is extra column

希望对您有所帮助。

【讨论】:

  • 你能让about语句起作用吗?
  • @user10389226 如果任务是上述任务之一,它已经可以工作了。你只需要复制你选择使用的代码
  • 你可以编辑我在顶部添加的代码以满足要求
  • @user10389226 完成
  • 对不起,仍然不能满足要求。你能清楚地检查我的代码并得到那个输出吗?请
【解决方案2】:

我会像这样遍历您要检查的列表:

name_1=['mahesh','karthik','nani','Karun']
name_2 ['mahesh','karthik','Karun']

for item in name_1:
    if item not in name_2:
        print(f"{item} is missing.")

如果您想将缺少的项目添加到新列表中:

missing_items_list = []
for item in name_1:
    if item not in name_2:
        missing_items_list.append(item)
print(f"Missing items from list_2: {missing_items_list}")

【讨论】:

    【解决方案3】:

    如果您正在寻找两个列表之间的对称差异,那么理想情况下您会将它们作为集合进行维护,但是假设您有充分的理由在此处未引用使用列表,那么您可以这样做:

    import sys
    
    name_1=['mahesh','karthik','nani','Karun']
    name_2=['mahesh','karthik', 'Karun']
    
    missing = set(name_1) ^ set(name_2)
    print('\n'.join(f'{name} is missing' for name in missing))
    
    if len(missing):
        sys.exit()
    

    【讨论】:

      猜你喜欢
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2020-10-14
      相关资源
      最近更新 更多