我有两个相等的列表,它们的值相互连接:
list1 = [29, 4, 15, 4, 5, 5]
list2 = [57.49999999999999, 89.74358974358975, 78.94736842105263, 100.0, 94.44444444444444, 57.89473684210527]
如果list1
中相应的第i个值小于40
,如何将list2
中的第i个值更改为65.0
?
答案 0 :(得分:2)
使用三元运算符和zip
的列表理解应该可以解决问题:
[40 if list2_val < 65.0 else list1_val
for list1_val, list2_val in zip(list1, list2)]
Out[2]: [40, 4, 15, 4, 5, 40]
FWIW,这种更紧凑(但可能更难阅读)的语法将产生与Tobias's answer相同的结果。
根据您的列表有多长,您可以尝试使用pandas
和numpy
:
>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame({'list1': list1, 'list2': list2})
>>> df
list1 list2
0 29 57.500000
1 4 89.743590
2 15 78.947368
3 4 100.000000
4 5 94.444444
5 5 57.894737
>>> df['list1_new'] = np.where(df['list2'] < 65, 40, df['list1'])
list1 list2 list1_new
0 29 57.500000 40
1 4 89.743590 4
2 15 78.947368 15
3 4 100.000000 4
4 5 94.444444 5
5 5 57.894737 40
答案 1 :(得分:2)
我应该在评论中使用zip
,我认为这将是最干净的解决方案。
new_list1 = []
for a, b in zip(list1, list2):
if b < 65.0:
new_list1.append(40)
else:
new_list1.append(a)
答案 2 :(得分:2)
您必须迭代list2以查找哪个索引的值小于65.0。使用此索引号,您可以替换list1中的第n个值:
list1 = [29, 4, 15, 4, 5, 5]
list2 = [57.49999999999999, 89.74358974358975, 78.94736842105263, 100.0,
94.44444444444444, 57.89473684210527]
for i in range(0, len(list1)):
if list2[i] < 65.0:
list1[i] = 40
print(list1)