2017-10-26 14 views
-1

Pythonでは、リストの文字列がいっぱいで、長さを最大値で検索したいと思っています。同じ長さを共有する文字列がある場合は、両方を出力します。私はそれを持っているが、strings考えるPython multiple list max()

if len(in_list)>1: 
    while len(in_list) == a: 
    a = max(in_list, key=len) 
    print("Pair", pair,":", a) 
    in_list.remove(a) 

elif len(in_list)<1: 
    print("Pair", pair, ": No Common Sequence Found") 
+1

'ながら、LEN( in_list)== a'? – user2357112

+0

私は正確には分かりません。私はこれで新しいですが、文字列の最大値を取得しようとしています。文字列の2つの要素が同じ長さを共有している場合は、両方を出力します。それは理にかなっていますか?ああ、私が作ったループのためのものです。 – Ivonne

答えて

0

私たちが文字列のリストを歩いたときの良いアルゴリズムへ私たちはそれを歩く必要があるとき後:それは物事を繰り返し避けるようコンパイル言語で

longest = strings[:1] 
length = len(longest) 

for string in strings: 
    string_length = len(string) 

    if string_length >= length: 

     if string_length > length: 
      longest = [] 
      length = string_length 

     longest.append(string) 

print(longest) 

、このより詳細なアプローチは、おそらく速くなります。場合は、我々は辞書のために叫ぶ一部の優雅さといくつかのスピード、欲しい時に/:3つのすべてのケースで

counter = {} 

for string in strings: 
    counter.setdefault(len(string), []).append(string) 

longest = counter[max(counter)] 

print(longest) 

を我々は取り戻す:あなたがやろうとした何

['python', 'string', 'length'] 
1

を動作するようには思えません。もっと読み出し可能

maxes = [string for string in strings if len(string) == max(map(len, strings))] 

(及び、この方法は、多くの方が効率的であり、それを指摘してシャドウレンジャーのおかげで):

maxlen = max(len(s) for s in strings) 
maxes = [string for string in strings if len(string) == maxlen] 

長さが最長文字列の長さと同じ場合は、すべての文字列を返します。

maxlen = max(len(s) for s in strings) 

longest = filter(lambda s: len(s) == maxlen, strings) 

print(list(longest)) 

しかし、その効率が原因よりCレベルまで物事をプッシュするよりによるものです:私たちは、簡潔かつ合理的に効率的に行くことができ

# word strings -> string to create a three way tie: 

strings = "In python I have a list full of string and I want it to find the max by length".split() 

:文字列のリストを考えると

+1

注: "もっと読みやすいバージョン"(これは前の行の 'map'でも使えます)は、* far *より効率的です。条件式の 'max'計算をインライン展開するたびに、' O(n) 'を' O(n ** 2) 'に変換します。 Pythonはあなたのためにそのようなものを最適化しません。 – ShadowRanger

+0

@ ShadowRangerそれも本当です。私はそれをちょっとしたメモと同じように書くつもりです。私はPPCGから来ていますが、その効率はほとんどの場合無関係です;):P – HyperNeutrino