我想比较长度相同但内容不同的列表列表。我的脚本应该只返回共享完全相同元素(在所有列表中)的位置。 例如:
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,所以速度更快)
