Python 按相同数字对列表进行分组
Python group list by same numbers
我需要有关 python 功能的帮助,如果它们被另一个数字分隔,它将为我计算列表中有多少重复数字。
nums = [3, 1, 2, 3, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 1, 2]
应该return
{
[3]: 2,
[1]: 3,
[2]: 5,
[1, 1]: 2,
[2, 2, 2, 2]: 1
}
请注意,您不能将列表作为键。相反,我们可以使用字符串。
这 returns 所有长度的条纹,而不仅仅是最大和最小。如果您不喜欢,请在评论中说出来。
nums = [3, 1, 2, 3, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 1, 2]
results = {}
streak = 0
previous = None
for num in nums:
print(num)
if previous != num:
streak = 0
streak += 1
previous = num
for i in range(1, streak + 1):
results[str(num)*i] = results.get(str(num)*i, 0) + 1
如果您需要解释,请发表评论。
可以用itertools.groupby
来收集连续的数字,用collections.Counter
来统计:
nums = [3, 1, 2, 3, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 1, 2]
from itertools import groupby
from collections import Counter
dict(Counter(tuple(g) for k,g in groupby(nums)))
注意。您不能将列表用作字典键,我使用元组代替
输出:
{(3,): 2,
(1,): 3,
(2,): 5,
(1, 1): 2,
(2, 2, 2, 2): 1}
我需要有关 python 功能的帮助,如果它们被另一个数字分隔,它将为我计算列表中有多少重复数字。
nums = [3, 1, 2, 3, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 1, 2]
应该return
{
[3]: 2,
[1]: 3,
[2]: 5,
[1, 1]: 2,
[2, 2, 2, 2]: 1
}
请注意,您不能将列表作为键。相反,我们可以使用字符串。
这 returns 所有长度的条纹,而不仅仅是最大和最小。如果您不喜欢,请在评论中说出来。
nums = [3, 1, 2, 3, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 1, 2]
results = {}
streak = 0
previous = None
for num in nums:
print(num)
if previous != num:
streak = 0
streak += 1
previous = num
for i in range(1, streak + 1):
results[str(num)*i] = results.get(str(num)*i, 0) + 1
如果您需要解释,请发表评论。
可以用itertools.groupby
来收集连续的数字,用collections.Counter
来统计:
nums = [3, 1, 2, 3, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 1, 2]
from itertools import groupby
from collections import Counter
dict(Counter(tuple(g) for k,g in groupby(nums)))
注意。您不能将列表用作字典键,我使用元组代替
输出:
{(3,): 2,
(1,): 3,
(2,): 5,
(1, 1): 2,
(2, 2, 2, 2): 1}