Python 比较数组的索引
我有三个数组,我的目标是比较索引并选择每种情况下的最大值。例如:Python 比较数组的索引,python,Python,我有三个数组,我的目标是比较索引并选择每种情况下的最大值。例如: a = [1,5,3,2,1] b = [34,1,5,4,7] c = [5,2,4,12,2] 我还有四个变量来保存计数 a_count = 0 b_count = 0 c_count = 0 no_count = 0 如果在a中找到索引0的最大值,则a_count+=1,b和c的值与b_count和c_count的值相同。但是,如果在任何情况下,某个特定索引处的数字
a = [1,5,3,2,1]
b = [34,1,5,4,7]
c = [5,2,4,12,2]
我还有四个变量来保存计数
a_count = 0
b_count = 0
c_count = 0
no_count = 0
如果在a中找到索引0的最大值,则a_count+=1,b和c的值与b_count和c_count的值相同。但是,如果在任何情况下,某个特定索引处的数字相似,则无计数+=1
我有使用zip收集列表中每个索引的最大值的经验,但这在某种程度上是不同的,我甚至不知道如何开始使用它。有更好的方法可以做到这一点,但这很有效,而且可读性很强
a = [1,5,3,2,1]
b = [34,1,5,4,7]
c = [5,2,4,12,2]
a_count = 0
b_count = 0
c_count = 0
no_count = 0
for A,B,C in zip(a,b,c): # Take one element from each list at a time.
D = max(A,B,C)
if A == B == D: no_count += 1
elif A == C == D: no_count += 1
elif B == C == D: no_count += 1
elif A == D: a_count += 1
elif B == D: b_count += 1
elif C == D: c_count += 1
有更好的方法可以做到这一点,但这是可行的,而且可读性很强
a = [1,5,3,2,1]
b = [34,1,5,4,7]
c = [5,2,4,12,2]
a_count = 0
b_count = 0
c_count = 0
no_count = 0
for A,B,C in zip(a,b,c): # Take one element from each list at a time.
D = max(A,B,C)
if A == B == D: no_count += 1
elif A == C == D: no_count += 1
elif B == C == D: no_count += 1
elif A == D: a_count += 1
elif B == D: b_count += 1
elif C == D: c_count += 1
能够用这种天真的方式让它工作
能够用这种天真的方式让它工作如果我已经很好地理解了你的问题,这可能就是你想要的:
a = [1, 5, 3, 2, 1]
b = [34, 1, 5, 4, 7]
c = [5, 2, 4, 12, 2]
# Create placeholder list
vals = [0, 0, 0, 0]
# Loop through the triplets of elements a[i], b[i], c[i]
for elem in zip(a, b, c):
if len(elem) != len(set(elem)):
vals[3] += 1
else:
vals[elem.index(max(elem))] += 1
a_count, b_count, c_count, no_count = vals
print(a_count, b_count, c_count, no_count)
# 1 3 1 0
关于实施的一些评论。首先,为了方便起见,我们创建了一个占位符列表
vars
,其元素分别对应于a\u count、b\u count、c\u count、no\u count
的值。然后我们循环遍历值的三元组a[i],b[i],c[i]
(这是通过for循环中的zip函数完成的)。在这个循环中,首先我们测试三元组的长度是否等于一组三元组元素的长度(因为集合只能有唯一的元素,这确保没有重复),如果这个条件不成立,那么我们增加相应的a_count,b_count,c_count
如果我完全理解了你的问题,这可能就是你想要的:
a = [1, 5, 3, 2, 1]
b = [34, 1, 5, 4, 7]
c = [5, 2, 4, 12, 2]
# Create placeholder list
vals = [0, 0, 0, 0]
# Loop through the triplets of elements a[i], b[i], c[i]
for elem in zip(a, b, c):
if len(elem) != len(set(elem)):
vals[3] += 1
else:
vals[elem.index(max(elem))] += 1
a_count, b_count, c_count, no_count = vals
print(a_count, b_count, c_count, no_count)
# 1 3 1 0
关于实施的一些评论。首先,为了方便起见,我们创建了一个占位符列表
vars
,其元素分别对应于a\u count、b\u count、c\u count、no\u count
的值。然后我们循环遍历值的三元组a[i],b[i],c[i]
(这是通过for循环中的zip函数完成的)。在这个循环中,首先我们测试三元组的长度是否等于一组三元组元素的长度(因为集合只能有唯一的元素,这确保没有重复),如果这个条件不成立,那么我们增加相应的a_count,b_count,c_count
特定索引处的数字相似
,请更具体地说,相似是什么意思?如果a[i]==b[i]或a[i]==c[i],则无_count+=1@PM77-我已经编辑了这篇文章。最初使用的是2d阵列,所以我将其展平为1d。请刷新。特定索引处的数字相似
,请更具体一点,相似是什么意思?如果a[i]==b[i]或a[i]==c[i],则无计数+=1@PM77-我已经编辑了这篇文章。最初使用的是2d阵列,所以我将其展平为1d。请刷新。这将使b_计数为5,其余为0。事实并非如此,改变了它。谢谢你让我知道。这是给b_count=5,其余为0。事实并非如此,改变了它。谢谢你让我知道。你能比较一下你的代码和我的相同输入数组的输出吗?它可以用更少的行来编写。谢谢@panadestein,你的代码也很好用,而且更酷。我将尝试了解它是如何工作的。我已编辑了我的答案,以添加有关实施的更多详细信息。如果您有任何问题,我很乐意为您提供帮助。对于相同的输入数组,您能将您的代码输出与我的代码输出进行比较吗?它可以用更少的行来编写。谢谢@panadestein,你的代码也很好用,而且更酷。我将尝试了解它是如何工作的。我已编辑了我的答案,以添加有关实施的更多详细信息。如果你有任何问题,我很乐意帮助你。