簡體   English   中英

打印列表python中的匹配項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM