我刚开始学习python, 我有一个简单的问题。
l=['aa123','aa122','aa124','bb125','bb180']
#form above list i want to print a result as following:
Group 1
aa123
aa122
aa124
Group 2
bb125
bb180
我希望如果我使用' cc000'更新列表,它还会打印一个' Group 3'
谢谢和问候, 乔瓦尼
答案 0 :(得分:1)
您可以使用itertools.groupby
j = 0
keyfunc = lambda x:x[:2]
for k,i in groupby(sorted(l, key=keyfunc), key=keyfunc):
j += 1
print("group"+str(j))
for t in list(i):
print(t)
输出:
group1
aa123
aa122
aa124
group2
bb125
bb180
答案 1 :(得分:0)
您可以使用字典来更好地对值进行分组:
import string
from collections import defaultdict
l=['aa123','aa122','aa124','bb125','bb180']
key = {a:b+1 for a, b in zip(string.ascii_lowercase, range(26))}
d = defaultdict(list)
for val in l:
d[key[val[0]]].append(val)
for a, b in d.items():
print("Group {}".format(a), b)
输出:
Group 1 ['aa123', 'aa122', 'aa124']
Group 2 ['bb125', 'bb180']
或者,在列表理解中使用groupby
:
import itertools
final_vals = {"Group {}".format(a):list(b) for a, b in itertools.groupby(sorted(l, key=lambda x:x[0]), key=lambda x:x[0])}
print(final_vals)
输出:
{'Group b': ['bb125', 'bb180'], 'Group a': ['aa123', 'aa122', 'aa124']}
答案 2 :(得分:0)
i = ['bb334', 'aa341', 'cc555', 'aa342', 'aa337']
x = []
# Creating new ordered list
for j in range(0, 26):
for k in i:
if ord(k[0]) - 97 == j:
x.append(k)
# Printing out list by groups
current_ord = ord(x[0][0])
counter = 1
print 'Group ' + str(counter) + ':'
for j in x:
if ord(j[0]) != current_ord:
current_ord = ord(j[0])
counter += 1
print '\nGroup ' + str(counter) + ':'
print j
因为您正在进行26 * len(i)次迭代来创建排序列表,所以很慢。我不确定这是否完全回答了你的问题...当一个项目如“ab111'在列表中?它会忽略这个吗?