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,你的代码也很好用,而且更酷。我将尝试了解它是如何工作的。我已编辑了我的答案,以添加有关实施的更多详细信息。如果你有任何问题,我很乐意帮助你。