使用python将列表的某些部分合并在一起

2024-05-15 12:50:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常有趣的问题需要解决。你知道吗

假设我有一个以下格式的字符串:

input = ['opst tops', 'opst opts', 'opst pots', 'eip pie', 'eip epi']

上面的字符串将帮助我找到字谜。例如,单词“tops”有符号“opts”,同时单词“opts”也有符号“opts”。。。因此,所有具有符号“opst”的单词都应分组在一起,如下所示。输出是单词anagram类。你知道吗

output = ['tops opts pots', 'pie epi']

我是python新手,如果你能帮我,我将不胜感激。很抱歉给您带来了困惑,希望您能理解。你知道吗


Tags: 字符串inputoutput格式符号单词epipie
2条回答

为了方便起见,请使用^{} object来收集您的单词:

from collections import defaultdict

words = defaultdict(list)
for entry in raw:
    key, word = entry.split()
    words[key].append(word)

raw = [' '.join(v) for v in words.values()]

defaultdict使这里的代码更干净;它只是dict的一个子类,如果键还不存在,它将调用工厂(这里设置为list)。如果没有defaultdict,您必须使用:

words = {}

在循环中:

words.setdefault(key, []).append(word)

演示:

>>> from collections import defaultdict
>>> raw = ['opst tops', 'opst opts', 'opst pots', 'eip pie', 'eip epi']
>>> words = defaultdict(list)
>>> for entry in raw:
...     key, word = entry.split()
...     words[key].append(word)
... 
>>> [' '.join(v) for v in words.values()]
['pie epi', 'tops opts pots']

如果输入列表已排序且顺序很重要,则还可以使用^{}

from itertools import groupby

raw = [' '.join(w.split()[1] for w in words) 
       for key, words in groupby(raw, key=lambda e: e.split()[0])]

演示:

>>> from itertools import groupby
>>> [' '.join(w.split()[1] for w in words) 
...        for key, words in groupby(raw, key=lambda e: e.split()[0])]
['tops opts pots', 'pie epi']

比如:

from collections import defaultdict

d = defaultdict(list)
for s in raw:
    sig, val = s.split(' ')
    d[sig].append(val)
res = [' '.join(val) for val in d.values()]

请注意,使用字典意味着“签名”可能不会按顺序出现。你知道吗

相关问题 更多 >