python loop 问题

a = ['long','short','long']
b = [2,3,4]
c=[]
for i in a:
for y in b:
if i == 'long':
c.append(-y)

    else:
        c.append(y)
      

print(c)

我想得到 c[-2,3,4]
但是却返回[-2, -3, -4, 2, 3, 4, -2, -3, -4]

你应该想得到 c[-2,3,-4]吧,代码如下,有用请点一下采纳谢谢

a = ['long','short','long']
b = [2,3,4]
c=[]
for i, y in zip(a,b):
    if i == 'long':
        c.append(-y)
    else:
        c.append(y)
print(c)


你用的是双循环,3*3不就是9个元素么
第三个也是long,哪b中的4不应该也是-4么,为什么你想得到的是c[-2,3,4]呢?

a = ['long', 'short', 'long']
b = [2, 3, 4]
c = []
for i in range(len(a)):
    if a[i] == 'long':
        c.append(-b[i])
    else:
        c.append(b[i])

print(c)

这样输出[-2,3,4]是你要的不

你这是双重循环了,在遍历a的元素时,每遍历一个a内元素遍历一遍b,所以变成了3*3的结果

可以用zip,或者遍历的时候用下标同时访问,总之只需要一次遍历

你的那两个for循环嵌套了,你第一个for循环每遍历一个值,第二个for循环都会把2 3 4全部遍历一遍,所以2 3 4在你的程序里面会遍历3次,共9个数。
解决方案:把那两个for循环和在一起写就行了。

因为双循环,每个都有3个元素,所以循环下来就是3*3=9,c的元素个数自然就是9。

既然输出结果为c[-2,3,4],则使用b列表循环即可。增加控制条件即可,如下:

a = ['long','short','long']
b = [2,3,4]
c=[]

for y in b:
    if y<len(a) and a[y] == 'long':
        c.append(-y)
    else:
        c.append(y)
    
print(c)