我正试图在代码大战中解决这个问题而且我完全难过了:
y = [-1, -1, 2, 8, -1, 4]
z = [1,3,5]
#to create [1,3,2,8,5,4]
我该怎么做?
我试着这样做:
for e in range(len(y)):
try:
if y[e] < 0:
y[e] = z[e]
except:
pass
但这只有在负面对应z中的情况时才有效。
答案 0 :(得分:11)
如果您确定负数的数量始终与z
相等,则可以将z
转换为可迭代,并使用列表推导来创建新列表:
In [9]: z = iter(z)
In [10]: [next(z) if i < 0 else i for i in y]
Out[10]: [1, 3, 2, 8, 5, 4]
请注意,如果z
的长度短于负数,则会引发StopIteration
错误。
答案 1 :(得分:3)
一衬垫。使用pop()
模拟队列行为。 (注意这消耗 z
)
>>> print([num if num > 0 else z.pop(0) for num in y])
[1, 3, 2, 8, 5, 4]
答案 2 :(得分:0)
您尝试对两个列表使用相同的索引,这似乎不是您示例中的正确行为。例如,y
中的-1位于索引4处,但会被索引2处z
中的5替换。
zindex = 0
for yindex in range(len(y)):
if y[yindex] < 0:
y[yindex] = z[zindex]
zindex += 1
答案 3 :(得分:0)
您的代码:
for e in range(len(y)):
if y[e] < 0: y[e] = z[e]
您的代码存在问题,我们说第5个元素是否定的。您正在尝试将y
的第5个元素设置为z
的第5个元素。相反,您应该使用计数器变量来跟踪要替换的元素。
element_z_index = 0
for e in range(len(y)):
if y[e] < 0:
y[e] = z[element_z_index]
element_z_index += 1