转换 python 列表的一些元素并保留其余元素

问题描述 投票:0回答:2

我正在寻找一种优雅的方式来转换列表的某些元素并保留其余元素。

考虑以下列表:

list_ = [0, 0, 1, 1, 0, 0]

我想将

list_
转换为
[0, 1, 1, 1, 0, 1]
,当然我可以写一个带有一些 if 语句的 for 循环,例如:

list_ = [1 if i == 1 or i == 5 else list_[i] for i in range(len(list_))]

但是,我正在寻找一种基本方法,它复制值等于

_
的元素,并将其余值转换为给定值(在本例中为 1),例如:

list_ = [_, 1, _, _, _, 1] in list_

有没有一种蟒蛇式的方法可以做到这一点?还是我应该为它写一个函数?

另外,有时转换后的元素不等于0,但是例如'x'。

例如:

list_ = [0, 0, 1, 1, 0, 0]
# some magic functions etc... for converting 1st element to 'x' and 5th to 2
magic([_, 'x', _, _, _, 2], list_)

in>>> list_
out>> [0, 'x', 1, 1, 0, 2]
python list converters
2个回答
2
投票
list_ = [0, 0, 1, 1, 0, 0]

mask = [None, 1, None, None, None, 1]

l = [el_mask if el_mask is not None else el_list for el_list, el_mask in zip(list_, mask)]

print(l) # [0, 1, 1, 1, 0, 1]

你的问题几乎可以归结为获取两个列表,并将它们与一个优先于另一个列表组合。

您可以使用 zip 函数组合 2 个列表,这将为您提供各个元素的元组 (

[(0, None), (0, 1), (1, None), (1, None), (0, None), (0, 1)]
)。然后你只需要在元组中的 2 之间选择正确的元素。


-1
投票

在 Python 中,你很少需要用

range(len(sequence))
做 - 如果你这样做,那实际上表明你是“unpythonic”

在这种情况下,您几乎找到了进行替换的理想方式 - 但对于这件事:

for
already 迭代您的初始列表元素:不需要具有
i
索引,然后获取元素在那个位置:

list_ = [1 if element != 1 else element for element in list_]
© www.soinside.com 2019 - 2024. All rights reserved.