簡體   English   中英

列表理解與 Python 中的模式匹配

[英]List comprehension with pattern match in Python

我有一個名為columns的列表,我必須根據元素的拆分(前三個)創建一個嵌套列表。

例如,我將這個元素“101 Drive 1 A”分成“101 Drive 1”並組成一個組。

columns = ['101 Drive 1 A','101 Drive 1 B','102 Drive 2 A','102 Drive 2 B','102 Drive 2 C','103 Drive 1 A']

輸出將如下所示:

[
  ['101 Drive 1 A', '101 Drive 1 B'],
  ['102 Drive 2 A', '102 Drive 2 B', '102 Drive 2 C'],
  ['103 Drive 1 A']
]

一種使用collections.defaultdict的方法:

from collections import defaultdict

columns = ['101 Drive 1 A', '101 Drive 1 B', '102 Drive 2 A', '102 Drive 2 B', '102 Drive 2 C', '103 Drive 1 A']

groups = defaultdict(list)
for column in columns:
    key = column[:3]
    groups[key].append(column)

res = list(groups.values())
print(res)

輸出

[['101 Drive 1 A', '101 Drive 1 B'], ['102 Drive 2 A', '102 Drive 2 B', '102 Drive 2 C'], ['103 Drive 1 A']]

一個更健壯的替代方法,適用於字符串開頭的任何數字,是使用正則表達式

import re

groups = defaultdict(list)
for column in columns:
    key = re.match("\d+", column).group()
    groups[key].append(column)

res = list(groups.values())
print(res)

直接使用itttools的grouby

from itertools import groupby

mask = [list(group) for k, group in groupby(columns, lambda s: s.partition(' ')[0])]
print(mask)

給#

[
  ['101 Drive 1 A', '101 Drive 1 B'],
  ['102 Drive 2 A', '102 Drive 2 B', '102 Drive 2 C'],
  ['103 Drive 1 A']
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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