[英]Comparing between entries in a list of lists using correct indexes
我有一个列表列表,我正在尝试将内部列表中的条目与其他条目进行比较。 例如:列表是my_list = [[4,6,4,3], [4,5,5,3], [4,1,1,3]]
我希望得到的输出是[4,'x','x',3]
也就是说,如果内部列表中i
索引中的条目在所有内部列表中都相同,则返回该条目,否则返回'x'
。
我的代码中的索引有问题,因为对于循环的i=2
轮,我得到了rows[4][j]
并且这超出了索引。 我通常不确定这里的外循环或如何修复条件中的索引。
def my_function(my_list):
lst = []
for i, entry in enumerate(my_list):
for j, elem in enumerate(entry):
if my_list[i][j] == my_list[i+1][j] and my_list[i+1][j] == my_list[i+2][j]:
lst.append(my_lists[i][j])
else:
lst.append('x')
return lst
您应该尽可能避免操作索引。 要迭代多个列表,请使用zip
。
要测试列表中的所有值是否相等,您可以创建一个set
,并检查它是否只包含一个值。
my_list = [[4,6,4,3], [4,5,5,3], [4,1,1,3]]
out = [zipped[0] if len(set(zipped)) == 1 else 'X' for zipped in zip(*my_list)]
print(out)
# [4, 'X', 'X', 3]
为此,您可以使用numpy
+ list comprehension:
import numpy as np
my_list = np.array([[4,6,4,3], [4,5,5,3], [4,1,1,3]])
res=['x' if (len(set(my_list[:,i]))>1) else list(set(my_list[:,i]))[0] for i in range(my_list.shape[1])]
输出:
[4, 'x', 'x', 3]
并修复您的代码(我不确定您的if
语句是什么意思)
def my_function(my_list):
lst = my_list[0]
for i, entry in enumerate(my_list):
for j, elem in enumerate(entry):
if my_list[i][j]==lst[j]:
lst[j]=my_list[i][j]
else:
lst[j]='x'
return lst
您可以使用这个简单的 python 代码。
my_list = [[4,6,4,3], [4,5,5,3], [4,1,1,3]]
li = []
for i, j, k in zip(*my_list):
val = i if i == j == k else 'x'
li.append(val)
print(li)
输出 :
[4, 'x', 'x', 3]
您还可以使用 all 来检查这一点:
[i[0] if all(j == i[0] for j in i) else 'X' for i in(zip(*my_list))]
或者:
[i[0] if all(map(lambda j: j == i[0], i )) else 'X' for i in(zip(*my_list))]
您还可以扩展项目以查看:
[i[0] if [i[0]]*len(i) == list(i) else 'X' for i in(zip(*my_list))]
但我认为最好的方法是使用set
:
[i[0] if len(set(i))==1 else 'X' for i in(zip(*my_list))]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.