如何从 python 中用逗号分隔的字符串中查找最长的字符串

How to find longest string from a string separated by comma in python

我有一个用逗号分隔的字符串,。我想从给定的字符串中找到最长的字符串。

words = 'run,barn,abcdefghi,yellow,barracuda,shark,fish,swim'

到目前为止我做了什么

print(max(words.split(','), key=len))

我得到这个输出 abcdefghi 但正如您所看到的 abcdefghibarracuda 具有相同的长度。那么,为什么我只得到一个而不是两个或全部。

还有

words = 'fishes,sam,gollum,sauron,frodo,balrog'

在上面string中,许多单词的长度相同。我想return他们每个人。

您可以 zip len of word to word 然后从 len 和 return 最大 len 创建 dict如下所示:

>>> from collections import defaultdict
>>> words = 'run,barn,abcdefghi,yellow,barracuda,shark,fish,swim'
>>> dct = defaultdict(list)
>>> lstWrdSplt = words.split(',')
>>> for word, length in (zip(lstWrdSplt,(map(len,lstWrdSplt)))):
...    dct[length].append(word)
    
>>> dct[max(dct)]
['abcdefghi', 'barracuda']

# for more explanation
>>> dct 
defaultdict(list,
            {3: ['run'],
             4: ['barn', 'fish', 'swim'],
             9: ['abcdefghi', 'barracuda'],
             6: ['yellow'],
             5: ['shark']})

您可以将其用作 function 并使用 regex 仅用于查找 words,如下所示:

from collections import defaultdict
import re

def mxLenWord(words):
    dct = defaultdict(list)
    lstWrdSplt = re.findall('\w+', words)
    for word, length in (zip(lstWrdSplt,(map(len,lstWrdSplt)))):
        dct[length].append(word.strip())
    return dct[max(dct)]
    
words = 'rUnNiNg ,swimming, eating,biking, climbing'
mxLenWord(words)

输出:

['swimming', 'climbing']

试试下面的方法

from collections import defaultdict
data = defaultdict(list)
words = 'run,barn,abcdefghi,yellow,barracuda,shark,fish,swim'
for w in words.split(','):
  data[len(w)].append(w)
word_len = sorted(data.keys(),reverse=True)
for wlen in word_len:
  print(f'{wlen} -> {data[wlen]}')

输出

9 -> ['abcdefghi', 'barracuda']
6 -> ['yellow']
5 -> ['shark']
4 -> ['barn', 'fish', 'swim']
3 -> ['run']

有很多方法我觉得对于这样一个简单的任务来说太复杂了。您可以使用 sorted() and groupby():

的组合来解决它
from itertools import groupby

words = 'run,barn,abcdefghi,yellow,barracuda,shark,fish,swim'
_, (*longest,) = next(groupby(sorted(words.split(","), key=len, reverse=True), len))
print(longest)

要查找所有长度相同的单词,您可以使用下一行:

from itertools import groupby

words = 'fishes,sam,gollum,sauron,frodo,balrog'
words_len = {l: list(w) for l, w in groupby(sorted(words.split(","), key=len), len)}
print(words_len)