Python-比较两个列表并更新第三个列表

时间:2018-08-03 07:07:12

标签: python python-3.x list

嗨,我不是Python的精通用户,我偶然发现了这个问题。我有以下3个列表(ss1不能为负数,g1和w1可以采用> = 0的值)

g1 = [2,0,1,1]
w1 = [1,0,3,1]
ss1 = [33, 45, 66, 54]

在我的玩具示例中,我想比较列表 g1 w1 例如 g1[0] == w1[0]中按元素排列的第一个元素此 true 我们将g1[0]*2乘以ss1 (ss1[0] += g1[0]*2),并将上一次操作的总和加到if the g1[0] != w1[0]g1[0]中,我们希望得出{{1} }和w1[0],带有负号w1[0] = -abs(g1[0] - w1[0]),并将此操作的结果添加到ss1ss1[0] += w1[0]中。

我想出了一个幼稚的解决方案:

if  g1[0] == w1[0]:
    ss1[0] += g1[0]*2
else:
    w1[0] = -abs(g1[0] - w1[0])
    ss1[0] += w1[0]
print(ss1)
if  g1[1] == w1[1]:
    ss1[1] += g1[1]*2
else:
    w1[1] = -abs(g1[1] - w1[1])
    ss1[1] += w1[1]
print(ss1)
if  g1[2] == w1[2]:
    ss1[2] += g1[2]*2
else:
    w1[2] = -abs(g1[2] - w1[2])
    ss1[2] += w1[2]
print(ss1)
if  g1[3] == w1[3]:
    ss1[3] += g1[3]*2
else:
    w1[3] = -abs(g1[3] - w1[3])
    ss1[3] += w1[3]
print(ss1)

所需的输出为[32, 45, 64, 56]

我当时正在考虑使用枚举器来解决此问题。

想以更有效的方式帮助我实现它,并将其付诸实践。我如何构建一个循环来明智地迭代和比较每个元素,并考虑添加操作。欢迎您提出解决方案。如果我在众多列表中遇到相同的问题(例如,我有相同的三胞胎的g2,ww2,ss2 ),那么解决方案是什么?

4 个答案:

答案 0 :(得分:2)

您可以使用list comprehension

ss1 = [(z+(x*2)) if x == y else (z-abs(x - y)) for x,y,z in zip(g1,w1,ss1)]

结果

[32, 45, 64, 56]

答案 1 :(得分:1)

print(list(map(lambda x: (x[2]+(x[0]*2)) if x[0] == x[1] else (x[2] -abs(x[0] - x[1])),zip(g1,w1,ss1))))

输出:

[32, 45, 64, 56]

答案 2 :(得分:0)

这可以通过这样的简单循环来解决

In [16]: for i,(a,b) in enumerate(zip(g1,w1)):
    ...:     if a == b:
    ...:         ss1[i] += a*2
    ...:     else:
    ...:         ss1[i] += -abs(a-b)
    ...:         
    ...:         

In [17]: ss1
Out[17]: [32, 45, 64, 56]

答案 3 :(得分:0)

这里有一些代码可以完成您的设置。它使用您的if / else代码和相同的列表。它也为您提供了一个功能,我在代码中展示了如何使用它:

input: 
    0-201-12345-X 3 20.00
    0-201-12345-X 4 20.00
    0-201-12345-X 2 21.50
    0-202-12345-X 2 25.50
    0-203-12345-X 4 10.00
output:
    0-201-12345-X 9 183 20.3333
    ^D

    0-202-12345-X 2 51 25.5
    0-203-12345-X 4 40 10
In my opinion, the output should be:
    0-201-12345-X 9 183 20.3333

    0-202-12345-X 2 51 25.5
    ^D
    0-203-12345-X 4 40 10

如何使用它:

#The function:

#Input array so function can return all lists
def compare(array):
    #Assign values to specific arrays again
    g1 = array[0]
    w1 = array[1]
    ss1 = array[2]

    #Use length of one array as all are the same length
    count = 0
    while count < len(g1):
        if  g1[count] == w1[count]:
            ss1[count] += g1[count]*2
        else:
            w1[count] = -abs(g1[count] - w1[count])
            ss1[count] += w1[count]

        #Count up till end of arrays
        count += 1

    #Return modified arrays
    array[0] = g1
    array[1] = w1
    array[2] = ss1
    return array