Skip to main content
 首页 » 编程设计

python之比较等长列表以查找共享相同元素的位置

2025年05月04日16lidabo

我想比较长度相同但内容不同的列表列表。我的脚本应该只返回共享完全相同元素(在所有列表中)的位置。 例如:

l = [[1,2,3,4,5,6,7,8],[9,8,8,4,3,4,5,7,8],[5,6,7 ,4,9,9,9,8],[0,0,1,4,7,6,3,8]]

结果我得到了一个位置列表 p = [3,7],因为在所有列表中我们在位置 3 和位置 7 分别有 '4' 和 '8'。

这些元素也可以是字符串,我只是举一个整数的例子。感谢您的帮助!

请您参考如下方法:

l = [[1,2,3,4,5,6,7,8],[9,8,8,4,3,4,5,7,8],[5,6,7,4,9,9,9,8],[0,0,1,4,7,6,3,8]] 
 
p = [i for i, j in enumerate(zip(*l)) if all(j[0]==k for k in j[1:])] 
 
# p == [3] - because of some typo in your original list, probably too many elements in the second list. 

这只是这个的单行(列表理解)版本,更详细:

p = [] 
for i, j in enumerate(zip(*l)): 
    if all(j[0]==k for k in j[1:]): 
        p.append(i) 

zip(*l) 为您提供:

[(1, 9, 5, 0), 
 (2, 8, 6, 0), 
 (3, 8, 7, 1), 
 (4, 4, 4, 4), 
 (5, 3, 9, 7), 
 (6, 4, 9, 6), 
 (7, 5, 9, 3), 
 (8, 7, 8, 8)] 

enumerate() 将数字 0、1、2 ... 放入该列表中的每个元组。

all(j[0]==k for k in j[1:]) 将元组的第一个元素与所有剩余元素进行比较,如果满足则返回 True它们都相等,False 否则(一旦找到不同的元素就返回 False,所以速度更快)