我有两个相等的列表,它们的值是相互关联的:
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
发布于 2017-10-27 20:40:20
使用三元运算符和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发布于 2017-10-27 20:40:30
你应该像我在评论中写的那样使用zip,我认为这将是最干净的解决方案。
new_list1 = []
for a, b in zip(list1, list2):
if b < 65.0:
new_list1.append(40)
else:
new_list1.append(a)发布于 2017-10-27 20:44:47
您必须对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)https://stackoverflow.com/questions/46975215
复制相似问题