3

重複の可能性:
リストからの最長の文字列

lst = [str1, str2, str3, ...]
max(lst, key=len)

これにより、最大長の文字列の1つだけが返されます。別の手順を定義せずにそれを行う方法はありますか?

4

4 に答える 4

5

どうですか:

maxlen = len(max(l, key=len)) 
maxlist = [s for s in l if len(s) == maxlen]
于 2012-12-31T20:32:35.010 に答える
3

最大長のすべての値を取得する場合は、リストを長さで並べ替えることができます。次に、長さが変わるまですべての値を取得する必要があります。itertoolsこれを行うための複数の方法を提供します— <code> takewhile、groupbyなど。例:

>>> l = ['abc', 'd', 'ef', 'ghi', 'j']
>>> l2 = sorted(l, key=len, reverse=True)
>>> groups = itertools.groupby(len, l2)
>>> maxlen, maxvalues = next(groups)
>>> print(maxlen, list(maxvalues))
3, ['abc', 'ghi']

ワンライナーが必要な場合:

>>> maxlen, maxvalues = next(itertools.groupby(len, sorted(l, key=len, reverse=True)))
>>> print(maxlen, list(maxvalues))

もちろん、必要に応じて、リストを2回パスするだけでもかまいません。最初に最大長を見つけ、次に一致するすべての値を見つけます。

>>> maxlen = len(max(l, key=len))
>>> maxvalues = (value for value in l if len(value) == maxlen)
>>> print(maxlen, list(maxvalues))
于 2012-12-31T20:35:12.573 に答える
1

完全を期すためにfilter、オプションもあります。

maxlens = filter(lambda s: len(s)==max(myList, key=len), myList)
于 2012-12-31T20:36:08.640 に答える
0

これがワンパスソリューションであり、これまでに見られた中で最も長い単語が見つかったときにそれを収集します。

def findLongest(words):
    if not words:
        return []
    worditer = iter(words)
    ret = [next(worditer)]
    cur_len = len(ret[0])
    for wd in worditer:
        len_wd = len(wd)
        if len_wd > cur_len:
            ret = [wd]
            cur_len = len_wd
        else:
            if len_wd == cur_len:
                ret.append(wd)
    return ret

いくつかのテストリストの結果は次のとおりです。

tests = [
    [],
    "Four score and seven years ago".split(),
    "To be or not to be".split(),
    "Now is the winter of our discontent made glorious summer by this sun of York".split(),
    ]

for test in tests:
    print test
    print findLongest(test)
    print


[]
[]

['Four', 'score', 'and', 'seven', 'years', 'ago']
['score', 'seven', 'years']

['To', 'be', 'or', 'not', 'to', 'be']
['not']

['Now', 'is', 'the', 'winter', 'of', 'our', 'discontent', 'made', 'glorious', 'summer', 'by', 'this', 'sun', 'of', 'York']
['discontent']
于 2012-12-31T21:43:30.810 に答える