3


リストを調べて、その中の最長の単語を印刷する必要があります。これは1つの単語で実行できますが、たとえば3文字の長さの単語が2つある場合、複数の単語を印刷する方法がわかりません。私はもう試した

list.sort (key=len, reverse =True)
print ("The longest word in the list is: " , list[0])

これは機能しますが、最初の最長の単語のみを印刷します。これは、複数の最長の単語には適していません。

私も試しました:

p=0
for item in list:
    if len (item) > p:
        s=item
        p = len(item)
print (s)

これも前のコードと同じです

また、リスト内の最短の単語に対してこれを行う必要があります。

これが良い質問ではない場合は、お詫び申し上げます。これが私の最初の質問です。

4

6 に答える 6

3

まず、組み込み型をオーバーライドし、後で問題を引き起こす可能性があるため、変数名として使用しないでくださいlist

あなたは最も長い言葉のためにこれをすることができます:

for i in lst:
    if len(i) == max(lst, key=len):
        print(i)

そして、最短の言葉のために:

for i in lst:
    if len(i) == min(lst, key=len):
        print(i)

最初のコードは、最長の文字列と同じ長さの文字列を出力します。2つ目も同じですが、文字列が最も短くなります。

小さな最適化は、ループの前に最大/最小の長さを事前に計算することです。そのため、毎回再計算する必要はありません。

maxLen = max(lst, key=len)
for i in lst:
    if len(i) == maxLen:
        print(i)

他のループについても同じことができます。

于 2013-02-06T09:06:23.323 に答える
2

既存のコードは、実際にはそれほど問題なく機能するように変更できます。に単一の文字列を保持する代わりに、文字列をs保持しlistます。前の最長と同じ長さのものを見つけたら、appendそれです。さらに長いものを見つけた場合は、を捨ててlist新しいものを始めてください。このような:

p=0
s=[]
for item in lst:
    if len(item) > p:
        s=[item]
        p=len(item)
    elif len(item) == p:
        s.append(item)
print(s)
于 2013-02-06T09:40:25.390 に答える
1

ボラティリティの答えは素晴らしいですが、これを行う別の方法を見てみましょう。

リストがソートされた順序であるだけでなく、同じ長さのバッチにグループ化されている場合はどうなりますか?そうすれば、これは簡単です。最初のグループを印刷し、最後のグループを印刷します。

そして、Pythonに付属している関数があり、そのグループ化を自動的に実行するitertools.groupbyので、簡単です

l.sort(key=len) # puts them in order
groups = list(itertools.groupby(l, key=len))
print('The shortest words are: {}'.format(groups[0][1])
print('The longest words are: {}'.format(groups[-1][1])

あなたはそれをワンライナーに変えることができます:

groups = list(itertools.groupby(sorted(l, key=len), key=len))

ただし、この場合はそうは思わない。それが繰り返されkey=len、それらの余分な括弧はすべて読みにくくなります。

一方、本当に最初のものだけが必要な場合は、グループのリスト全体を作成することを避けることができます。

l.sort(key=len)
shortest = itertools.groupby(l, key=len)
print('The shortest words are: {}'.format(next(shortest)[1]))
longest = itertools.groupby(reversed(l), key=len)
print('The longest words are: {}'.format(next(longest)[1]))

しかし、それlistが本当に巨大でない限り、私はこれについて心配しません。

于 2013-02-06T09:31:29.497 に答える
0

dictを使用して単語を収集できます。

results = {}
for word in words:
   if len(word) not in results:
      results[len(word)] = []
   results[len(word)].append(word)

次に、長さであるキーで辞書を並べ替え、単語を印刷します。これにより、最長の単語が最初に出力されます。逆にするには、次を削除しreverse=Trueます。

for i in sorted(results.keys(), reverse=True):
   print 'Number of words with length {}: {}'.format(i,len(results[i]))
   for word in results[i]:
      print word

最短と最長のみを印刷するには:

shortest = sorted(results.keys())[0]
longest = sorted(results.keys(), reverse=True)[0]

print 'Shortest words:'

for word in results[shortest]:
   print word

print 'Longest words:'

for word in results[longest]:
   print word
于 2013-02-06T09:13:48.873 に答える
0

常にラムダ関数も使用できます

longest = len(sorted(list, key=len)[-1])
filter(lambda item: len(item) == longest, list)

最長の単語を生成します

shortest = len(sorted(list, key=len)[0])
filter(lambda item: len(item) == shortest, list)

最短の単語を生成します

于 2013-02-06T09:24:19.813 に答える
-1
list.sort (key=len, reverse =True)
print ("The longest 3 words in the list are: " , list[:3])
于 2013-02-06T09:06:39.133 に答える