如何从 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
但正如您所看到的 abcdefghi
和 barracuda
具有相同的长度。那么,为什么我只得到一个而不是两个或全部。
还有
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)
我有一个用逗号分隔的字符串,
。我想从给定的字符串中找到最长的字符串。
words = 'run,barn,abcdefghi,yellow,barracuda,shark,fish,swim'
到目前为止我做了什么
print(max(words.split(','), key=len))
我得到这个输出 abcdefghi
但正如您所看到的 abcdefghi
和 barracuda
具有相同的长度。那么,为什么我只得到一个而不是两个或全部。
还有
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)