根据索引替换列表中的元素 python

Replace elements in lists based on indexes python

Whosebug 社区:

我有一个“休息”列表如下:

rest=[5, 7, 11, 4]

我有另一个列表 b:

b=[21, 22, 33, 31, 23, 15, 19, 13, 6]

我有一个“最后”列表:

last=[33, 19, 40, 21, 31, 22, 6, 15, 13, 23]

我必须用其余的元素替换 b 中的前 4 个元素。如何根据与b的匹配替换last中的元素得到剩余元素?

例如:

     5   7   11   4   #elements from rest
b= [21, 22, 33, 31, 23, 15, 19, 13, 6]

得到最后的列表如下:

last=[11, 19, 40, 5, 4, 7, 6, 15, 13, 23]  #elements that matched with b were replaced by rest

我该怎么做?

试试这个:

rest=[5, 7, 11, 4]
b=[21, 22, 33, 31, 23, 15, 19, 13, 6]
last=[33, 19, 40, 21, 31, 22, 6, 15, 13, 23]

for i, l in enumerate(last):
    if l in b:
        if b.index(l) < len(rest):
            last[i] = rest[b.index(l)]
            
print(last)

你可以尝试做这样的事情...

rest_change_index = 0
for i in range(len(b)):
   if b[i] in last:
       last_change_index = last.index(b[i])
       last[last_change_index] = rest[rest_change_index]
       rest_change_index += 1
print(last)

这会遍历b的元素,如果last中的元素与循环中正在迭代的b的元素匹配,则它会用rest的相应元素更改该值(第一次匹配的rest的第一个元素例等)。让我知道这是否有意义。

您可以按如下方式进行:

# Get first 4 items in b
b4 = b[:4]
# Create mapping from b to rest
b_to_rest = dict(zip(b4, rest))
# Use dictionary .get to either replace if in rest or keep if not
last = [b_to_rest.get(x,x) for x in last]

首先,我将b4定义为b中的前4项。然后我使用 zipdictb 值映射到 rest 值。最后,我使用列表理解来替换 last 中的项目。 .get(x,x) 表示尝试从字典中获取 x,如果不存在则使用 x.