根据单独行中另一个列表的值打印一个列表中元素的索引,并在python中为缺少的元素打印-1

问题描述 投票:0回答:2
A = [['a'],['a'],['b'],['c'],['b'],['a']]

B = [['k'],['k'],['a'],['b'],['k']]

我有两个列表,A和BI必须打印由列表A的空格分隔的索引号(索引号+ 1)的元素,这些元素也存在于列表B中。对于列表B的每个元素,我想打印列表A中的值的索引在一行中顺序排列。如果列表B中有任何元素,列表A中缺少该元素,那么我想为该元素打印-1。如何解决此问题?

我的代码:

dict_B = dict([(b[0],[]) for b in B])

for i,a in enumerate(A):
    if a[0] in dict_B:
        dict_B[a[0]].append(i+1)

for key in dict_B:
    if dict_B[key] == []:
        c = 0
        for i,x in enumerate(B):
            if x == list(key):
                c += 1
        for x in range(c):
            if x == c-1:
                print(-1,end=" ")
            else:
                print(-1)
    else:
        for elem in dict_B[key]:
            print(elem,end=' ')
    print()

我的代码输出:

-1
-1
-1 
1 2 6 
3 5 

预期输出:

-1
-1
1 2 6
3 5
-1
python list indices
2个回答
0
投票
for item_b in B:
    found = []
    for i, item_a in enumerate(A):
        if item_a == item_b:
            found.append(str(i))
    print(" ".join(found) or -1)

0
投票

您可以在这里使用collections.defaultdict

collections.defaultdict

输出:

from collections import defaultdict
idx_dict=defaultdict(list)

for idx,[val] in enumerate(A,1):
    idx_dict[val].append(idx)

for [key] in B:
    if key in idx_dict:
        print(' '.join(map(str,idx_dict[key])))
    else:
        print(-1)
© www.soinside.com 2019 - 2024. All rights reserved.