5

文字列で満たされたリストを含むネストされたリストがあります。私がやろうとしているのは、このネスト内の各リストを、そのネスト内で利用可能な最長のリストと同じ長さにすることです。これは簡単に聞こえますが、私の試みは失敗し (私はプログラミングにまったく慣れていません)、問題を解決するのに十分な相対的な答えのある質問を見つけることができません。

まず、最長のリストの長さを決定します。

maxSS7 = max(len(i) for i in ssValues7))

次に、for ループを使用して、各リストが最長のリストと同じ長さでない場合、一定量の「null」だけ拡張します。

for row in ssValues7:
    if row < len(maxSS7):
        row.extend(['null' * (len(maxSS7) - len(row))])

行を 'null' * 最長リストと現在のリストの差だけ拡張しています。エラーは発生しませんが、残念ながらネストされたリストには何もしていないようです。

誰かが私のエラーについて教えてもらえますか? どんな助けでも大歓迎です。

4

3 に答える 3

8

この式は、潜在的に非常に長い文字列を1 つ'null' * (len(maxSS7) - len(row))作成します。

使用する

row.extend('null' for _ in xrange(maxSS7 - len(row)))

代わりは。ジェネレーター式を使用すると、単に拡張するためだけに余分なリスト オブジェクトを作成することを回避できますrow

>>> ['null' * 2]
['nullnull']
>>> ['null' for _ in xrange(2)]
['null', 'null']

ただし、ステートメントが間違ったことをテストしているため、.extend呼び出し自体には到達しません。if次のように変更します。

 if len(row) < maxSS7:

maxSS7すでに数値 (最長のリストの長さ) です。その長さについてその数を尋ねることは、あなたが探していたものではありません。

于 2012-09-23T08:56:40.140 に答える
4

問題は次の行にあります。

if row < len(maxSS7):

リスト rowinteger と比較していますlen(maxSS7)。その都度評価しFalseます。次のように変更します。

maxLen = max(map(len, myList))
for row in myList:
    if len(row) < maxLen:
        row.extend(...)

Martijn Petersは、回答でコードの別の問題を指摘しました。

于 2012-09-23T08:57:23.530 に答える