[英]Print matching item in list python
我剛剛開始學習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”更新列表,它也會打印“第 3 組”
謝謝和問候,喬瓦尼
您可以使用字典來更好地對您的值進行分組:
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']}
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”這樣的項目在列表中時會發生什么? 它會忽略這個嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.