根据索引替换列表中的元素 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项。然后我使用 zip
和 dict
将 b
值映射到 rest
值。最后,我使用列表理解来替换 last
中的项目。 .get(x,x)
表示尝试从字典中获取 x
,如果不存在则使用 x
.
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项。然后我使用 zip
和 dict
将 b
值映射到 rest
值。最后,我使用列表理解来替换 last
中的项目。 .get(x,x)
表示尝试从字典中获取 x
,如果不存在则使用 x
.