打印列表python中的匹配项

时间:2017-09-27 14:04:33

标签: python python-3.x list

我刚开始学习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'

谢谢和问候, 乔瓦尼

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'在列表中?它会忽略这个吗?