2016-09-07 3 views
3

ネストされたリスト内の最大文字列の長さを取得する方法ネストされたリスト:彼らは、私はtは以下の文字列の最大値を取得</p> <p>(リストのリストから印刷テーブル再)私の以前の記事へのフォローアップ質問しようとしているされて

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

for i in tableData: 
    print(len(max(i))) 

私に7、5、5。しかし、 "チェリー" を与える8

が何であるかを私ここに行方不明?おかげさまで

答えて

4

最大ワードの長さはです。

>>> 'oranges' > 'cherries' 
True 

あなたはおそらく望んでいたことは言葉の長さの最大です:

max(len(word) for word in i) 

または同等に:

len(max(i, key=len)) 
+0

はどうもありがとうございました。それがそれでした。 –

+0

ちょうど興味深いですが、どのようにして最大文字列と各要素の最大長を印刷することもできますか?ありがとう –

+0

私はあなた自身がそれを理解できると確信しています! – wim

-1

単語がlexicographicallyを命じているので、これは間違った答えを与えます各行にmax要素の長さを表示していました。 Pythonはmaxという文字列要素を辞書の最後に表示される文字列要素(辞書順ソート)として計算します。あなたが代わりに欲しいの長さの基本の文字列ではないから最大のアルファベット文字を返し意志の文字列操作で代わりにlen(max(i))

for row in tableData: 
    print(max(len(s) for s in row)) 
+1

申し訳ありませんが明らかではありません。ネストされたリストの各要素から最大の文字列長が必要です。見通し:8,5,5。 –

+0

@ AT_1965:更新をチェックしてください – inspectorG4dget

0

max(len(s) for s in i)maxです。だからこのようなことをしなければならない。

len(max(sum(tableData,[]),key=len)) 

sum(tableData,[])list of listlistに、これはリストのリストを反復することができます変換されます。

長diffrenceを参照してください

In [1]: [len(max(i,key=len)) for i in tableData] 
Out[1]: [8, 5, 5] 

各行で、

In [2]: max(sum(tableData,[])) 
Out[2]: 'oranges' 
In [3]: max(sum(tableData,[]),key=len) 
Out[3]: 'cherries' 
+0

私はDVを使いませんでしたが、ユーザーはテーブル全体ではなく各行の最大長を求めていました。また、 'sum'を使ってリストを結合することは不必要に非効率的であり、ほとんどの人は理解と連鎖(https://docs.python.org/2/library/itertools.html#itertools.chain)の使用を好む。 – wim

+0

@wimそれは本当ですが、人々は理解力だけを好む、それが最も効率的な方法です。私はちょうど小さな目的だから 'sum 'を使った。そして、私は各行の長さの発見のために私の答えを更新しました。そして指摘してくれてありがとう。 –

関連する問題