您可以使用字典来保存新列表,并使用类别编号作为字典键。我们使用defaultdict来简化在字典中创建列表。
from collections import defaultdict
lst = [3.5, 1 ,7, 2, 4.5, 1, 6, 2, 4.8, 2, 3.1, 1, 9, 2]
# Separate data into different lists based on following number
d = defaultdict(list)
it = iter(lst)
for v, k in zip(it, it):
d[k].append(v)
# Display lists
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çoisFabre在评论中提到的那样,按排序顺序进行打印的方式稍微有效一些。
from collections import defaultdict
lst = [3.5, 1 ,7, 2, 4.5, 3, 6, 2, 4.8, 3, 3.1, 1, 9, 2]
# Separate data into different lists based on following number
d = defaultdict(list)
it = iter(lst)
for v, k in zip(it, it):
d[k].append(v)
# Display lists
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
,那么你会得到他们的第二元素的第一元素等
但在这里,我们已经通过了zip
两个引用到it
迭代器。因此,当zip
从两个it
中的每一个中读取下一个项目时,其确实在lst
中的项目对中工作。因此,在for
循环的每个循环中,我们从lst
获得连续的项目对。
请显示你的努力:)粘贴你的代码将是好的 – 0Tech
像0Tech说,展示你到目前为止。但也澄清,这些数字1和2的位置或标志。 – sten
@Roxanne您的编辑弄乱了'L'列表中的粗体文本。 –