如何将两个列表的子列表作为单个实体进行比较?

2024-10-01 00:33:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数组,每个数组有多个子列表,每个子列表有3个项。我尝试将这两个列表的子列表作为单个实体进行比较,而不是检查List1的子列表中的项和List2的子列表中的项。 这些值是使用数据框vaues你知道吗

我尝试过使用传统的python列表函数和嵌套for循环

arr1:  [['AU002' '000000000037080' 'VB_ADJ']  ['AU002' '000000000037080' 'VB_ADJ']  ['AU002' '000000000039325' 'VB_ADJ']  ['AU002' '000000000039325' 'VB_ADJ']]

arr2:  [['AU002' '000000000037080' 'HUNTER_DOUGLAS']  ['AU002' '000000000037080' 'EXP'] ['AU002' '000000000037080' 'GEN']  ['AU002' '000000000037080' 'VB_ADJ']  ['AU002' '000000000039325' 'EXP']]

在这里,arr1的元素4不在arr2中,但是我使用的方法无法获得正确的输出

#1.
mask = np.isin (arr1, arr2)
mask

#2.
i=0
for each in arr1:
   j=0
   if(i<3):
       for every in arr2:
           if(j<3):
               if(each[i]==every[j]):
                   print("found",each[i])
            else :
                print("not found",each[i])
        j+=1
i+=1

#3.
for each in arr1:
    for every in arr2:
        if each==every:
            print('found')
        else:
            print('not found')
#4.
result =  all(elem in arr2  for elem in arr1)
if result:
    print('Found')
else:
    print('Not Found')

Tags: in列表forif数组elseeachvb
3条回答

numpy的数组在这里可以很好地工作。你可以在这里阅读更多信息:https://docs.scipy.org/doc/numpy/reference/generated/numpy.array_equal.html

import numpy as np

lis1= [['AU002', '000000000037080', 'VB_ADJ'],  ['AU002', '000000000037080' ,'VB_ADJ'] , ['AU002' ,'000000000039325', 'VB_ADJ'],  ['AU002', '000000000039325', 'VB_ADJ']]
lis2=[['AU002', '000000000037080', 'HUNTER_DOUGLAS'] , ['AU002', '000000000037080', 'EXP'] ,['AU002', '000000000037080' ,'GEN'],  ['AU002' ,'000000000037080' ,'VB_ADJ'] , ['AU002' ,'000000000039325', 'EXP']]

for i in lis1:
    lis=[]
    for j in lis2:
        lis.append(np.array_equal(i,j))
    if True in lis:
        print('Found ', i)
    else:
        print('Not Found ', i)

输出

Found  ['AU002', '000000000037080', 'VB_ADJ']
Found  ['AU002', '000000000037080', 'VB_ADJ']
Not Found  ['AU002', '000000000039325', 'VB_ADJ']
Not Found  ['AU002', '000000000039325', 'VB_ADJ']

如果您的列表采用以下格式:

a1 = [['AU002' ,'000000000037080' ,'VB_ADJ'],  ['AU002', '000000000037080' ,'VB_ADJ'],  ['AU002', '000000000039325' ,'VB_ADJ'],  ['AU002', '000000000039325' ,'VB_ADJ']]

 b1 = [['AU002' ,'000000000037080' ,'HUNTER_DOUGLAS'] , ['AU002', '000000000037080', 'EXP'] ,['AU002', '000000000037080' ,'GEN'] , ['AU002' ,'000000000037080' ,'VB_ADJ'] , ['AU002', '000000000039325', 'EXP']]

只是:

[sublist_a1 for sublist_a1 in a1 for sublist_b1 in b1 if sublist_a1 == sublist_b1]

给出两个列表中的子列表:

[['AU002', '000000000037080', 'VB_ADJ'],
 ['AU002', '000000000037080', 'VB_ADJ']]

您可以使用:

found_list = [elem in arr2 for elem in arr1]

测试:

arr1 = [['AU002', '000000000037080', 'VB_ADJ'],
        ['AU002', '000000000037080', 'VB_ADJ'],
        ['AU002', '000000000039325', 'VB_ADJ'],
        ['AU002', '000000000039325', 'VB_ADJ']]
arr2 = [['AU002', '000000000037080', 'HUNTER_DOUGLAS'],
        ['AU002', '000000000037080', 'EXP'],
        ['AU002', '000000000037080', 'GEN'],
        ['AU002', '000000000037080', 'VB_ADJ'],
        ['AU002', '000000000039325', 'EXP']]

found_list = [elem in arr2 for elem in arr1]
print (found_list)

输出:

[True, True, False, False] # Only 0-th and 1-st elems of arr1 are in arr2

相关问题 更多 >