当前,我有一个包含以下内容的列表:
lst = [[2],[2,2],[2,2,2,3,3],[2,3,5,5]]
,我正在尝试以以下格式打印:
2^1 #since there is only one '2'
2^2 #since there are two '2' in the first list
2^3 | 3^2 #three '2' and two '3'
2^1 | 3^1 | 5^2 #one '2', one '3' and two '5'
我尝试过:
for i in range(len(lst)):
count = 1
if len(lst[i]) == 1:
print(str(lst[i][0]) + "^" + str(count))
else:
for j in range(len(lst[i])-1):
if lst[i][j] == lst[i][j+1]:
count+=1
else:
print(str(lst[i][j]) + "^" + str(count) + " | " +str(lst[i][j+1]) + "^" +str(count))
if count == len(lst[i]):
print(str(lst[i][j]) + "^" + str(count))
但是我得到了
的输出2^1
2^2
2^3 | 3^3
2^1 | 3^1
3^1 | 5^1
希望对此有所帮助
答案 0 :(得分:2)
from collections import Counter
for sublist in lst:
c = Counter(sublist)
print(' | '.join(f'{number}^{mult}' for number, mult in c.items()))
这使Counter
可以进行计数,并仅以所需的格式显示项目。
Counter
对象的作用就像字典一样(列表中的最后一项):
c = Counter({5: 2, 2: 1, 3: 1})
与dict
一样,您可以使用key, value
遍历c.items()
对。格式字符串f'{number}^{mult}'
然后生成类似5^2
的字符串,然后使用分隔符' | '
join
对其进行修饰。
答案 1 :(得分:0)
您可以使用 itertools.groupby 唯一的问题是印刷品上的尾随|
from itertools import groupby
lst = [sorted(i) for i in lst]
for i in lst:
for k, g in groupby(i):
print('{}^{} | '.format(k, len(list(g))), end='')
print()
2^1 | 2^2 | 2^3 | 3^2 | 2^1 | 3^1 | 5^2 |