如何根据另一个列表中的项目替换列表中的项目?

时间:2017-10-27 12:37:12

标签: python list

我有两个相等的列表,它们的值相互连接:

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

3 个答案:

答案 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相同的结果。

根据您的列表有多长,您可以尝试使用pandasnumpy

>>> 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)