嗨,我不是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])
,并将此操作的结果添加到ss1
或ss1[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 ),那么解决方案是什么?
答案 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