将列表分为两部分?
经过我的分析,我会得到一个列表,其中每个测量值都会出现两次。也就是说,可能会有重复的测量(比如1这个值在这里被测量了两次)。
example_list = [1, 2, 3, 4, 1, 1, 2, 1, 3, 4]
我想要的结果是:
outcome = [1, 2, 3, 4, 1]
顺序不重要,只要每个测量值只出现一次就可以。
因为可能会有重复的测量,所以我不能使用 unique()
这个方法。
有没有什么办法可以有效地将列表缩减一半,让每个测量值只出现一次呢?
补充说明:来自重复测量的列表元素会出现4次(在这个例子中)或更多次,而来自双重测量的元素会出现两次。
2 个回答
4
如果你把example_list
这个列表排序了,你就可以从中每隔一个选一个元素,来创建一个新的列表:
example_list = [1, 2, 3, 4, 1, 1, 2, 1, 3, 4]
outcome = sorted(example_list)[::2]
4
如果你不知道列表中哪些元素需要被丢弃,那么一个方法就是使用 Counter
,然后把每个元素的数量减半:
from collections import Counter
c = Counter(example_list)
for key in c:
c[key] //= 2
lst = list(c.elements())
以你的示例输入为例,lst
的值将是 [1, 1, 2, 3, 4]