2017-03-15 26 views
0

私は文字列のリストを持っています。そして、それぞれの内側のリストで最大の文字列を取得し、別のリストに格納したいと思います。例えば:Pythonでリストのリストから要素を比較するには

tableData = [['apples','bananas','oranges','cherries'], 
      ['Alice','Bob','Carol','David'], 
      ['dogs','cats','moose','goose']] 

widths = [0] * len(tableData) 

Iの幅に格納する[0]、幅のたtableData最長のストリング[0]、[1]たtableDataにおける最長文字列の幅を[1]の幅、及びそうです。どのように私は大きいのを得るために単語の長さを比較することができますか?私が思った

唯一の方法は、これをやっている:

for f in range(len(tableData)): 
    for c in range(len(tableData[1])): 
     max = len(tableData[f][c]) 
     if max < len(tableData[f][c+1]): 
      max = len(tableData[f][c+1]) 
    widths[f] = max 
+1

何を試しましたか?あなたの難しさはどこにありますか? –

答えて

2
widths = [len(max(lst, key=len)) for lst in tableData] 

はまた、人々が私のミスから学びたい場合、これは古い、不正解です

widths = [max([len(word) for word in x]) for x in tableData] 

に短縮することができ

# creates a list of lists of word lengths 
lengths_of_words = [[len(word) for word in x] for x in tableData] 

# finds the max length for each list 
widths = [max(y) for y in lengths_of_words] 
tableDataと呼ばれるあなたのリスト、これは与える:

[8, 5, 5] 

説明:

[max(lst, key=len) for x in tableData]はあなたにネストされた各リストの最も長い文字列を含むリストを提供します。 len()を使用して、これらの長さを取得します。

同じ結果を使用して達成することができる。

widths = [len(sorted(lst, key=len)[-1]) for lst in tableData] 

sorted(lst, key=len)が最短から最長に、長さによって各リストの要素をソートしますどこ。 [-1]を使用すると、各リストの最後の値、つまり最も長い文字列を取得できます。 len()は、その長さを計算します。

+0

これはうまくいった、ありがとう。私はmax()関数を認識していなかったので、もっと調べるために研究をしています。 – Xcecution

+1

問題ありません。ここで重要な部分は、[m​​ax(lst_of_strings)](https://docs.python.org/3.6/library/functions.html#max)が文字列を辞書的に比較することです。つまり、アルファベット順にソートされたときに最後に来る文字列を返します。したがって、最長の文字列を取得するには、 'max(lst_of_strings、key = len)'が必要です。実際の長さを取得するには 'len()'を使うことができます。 –

-1

幅の初期化を心配しないでください。 List comprehensionsはあなたの友人です。

widths = [len(max(x)) for x in tableData] 
+0

oが他の最初の文字よりも高いので、どのケースが 'オレンジ'になるのかをリスト内の 'max'アイテムの長さで確認しています。最も長い長さの紐がチェリーであるとき。 (最初のリストの) – Wright

+0

これは本当です、これは本当です。編集するでしょう – Charlie

+0

助けてくれてありがとう@ライト、それは私が何かを知っているように充電することです – Charlie

関連する問題