您可以使用字典来保存新列表,以类别编号作为字典键。我们使用defaultdict来简化在字典中创建列表的过程。
from collections import defaultdict
lst = [3.5, 1 ,7, 2, 4.5, 1, 6, 2, 4.8, 2, 3.1, 1, 9, 2]
d = defaultdict(list)
it = iter(lst)
for v, k in zip(it, it):
d[k].append(v)
for k in sorted(d.keys()):
print(k, d[k])
输出
1 [3.5, 4.5, 3.1]
2 [7, 6, 4.8, 9]
这段代码可以处理任意数量的分类。
正如Jean-François Fabre在评论中提到的那样,有一种稍微更高效的方法来按排序顺序打印。
from collections import defaultdict
lst = [3.5, 1 ,7, 2, 4.5, 3, 6, 2, 4.8, 3, 3.1, 1, 9, 2]
d = defaultdict(list)
it = iter(lst)
for v, k in zip(it, it):
d[k].append(v)
for k, v in sorted(d.items()):
print(k, v)
输出
1 [3.5, 3.1]
2 [7, 6, 9]
3 [4.5, 4.8]
这个算法的核心是:
it = iter(lst)
for v, k in zip(it, it):
it = iter(lst)
创建了一个列表的迭代器对象。我们将这个迭代器的两个副本传递给 zip
。
在 zip
循环中,每次得到的是由每个参数中连续的元素组成的元组。换句话说,如果你使用 zip(a, b, c)
,你将得到 a
,b
,c
中相应元素的第一个元素,然后是它们的第二个元素等等。
但是,在这里,我们将两个对 it
迭代器的引用传递给了 zip
。因此,当 zip
从这两个 it
中读取下一个元素时,实际上是通过 lst
中的一系列项进行处理。因此,在每个 for
循环中,我们都会从 lst
中得到连续的一对元素。
L
列表中的粗体文本。 - PM 2Ring