满足特定条件时替换列表中的元素

时间:2020-10-22 05:01:50

标签: python python-3.x

我想通过在值大于某个值时添加另一个列表来更改列表中的特定元素。

说我们有2个列表:

num_list=[1,5,2,19,28,21]
num_list_2=[2,8,23,81,52,31]
value=3

对于第一个列表,我希望所有大于3的值都可以更改。我希望将所有大于3的值添加到第二个列表(num_list_2)中以创建一个新列表。这是我的处理方式:

updated_list=[]
for k in num_list:
 if k > value:
  updated_list=num_list[k]+num_list_2[k]

由于某种原因,我一直在获取“列表索引超出范围”的信息,我不确定原因为何。作为我的初学者,任何帮助将不胜感激。预先感谢!

2 个答案:

答案 0 :(得分:2)

这里

num_list=[1,5,2,19,28,21]
num_list_2=[2,8,23,81,52,31]
value=3

updated_list=[]
for k, n in enumerate(num_list):
 if n > value:
    updated_list.append(n + num_list_2[k])
 else:
    updated_list.append(n)
      
print(updated_list)

您的方法很好,但是您需要使索引指向数组的位置。因此,使用索引和值枚举列表,然后将结果追加到列表中。

k是索引,n是array [k]处的值

注意:我还添加了else部分,如果小于或等于3,则只需按第一个列表的值即可

谢谢

答案 1 :(得分:1)

def my_function(list_1, list_2, val):

    def choose(index):
        x = list_1[index]
        return x if x <= val else x + list_2[index] 

    return [choose(i) for i in range(len(list_1))]

如果您遇到索引异常,可能仅是因为list_2list_1

请注意,以下单元测试确实通过了

def test_my_function():

    list_1 = [1, 5, 2, 19, 28, 21]
    list_2 = [2, 8, 23, 81, 52, 31]
    value = 3

    expected = [1, 13, 2, 100, 80, 52]
    actual = my_function(list_1, list_2, value)

    assert actual == expected