3

Pythonにリストがあり、リスト内包表記を使用して最初の5つの要素を出力しようとしています。

これは、二重リスト内包表記を使用して行う必要があることを理解しています。現在、次のものがあります。

print [[x[i] for x in mylist] for i in range(0,5)]

これにより、次のエラーがスローされますIndexError: tuple index out of range

それぞれを別々に印刷すると、うまくいきます。私はprint mylist[0]print mylist[1]など...

ここでの問題は何ですか?私の二重の理解全体が正しくないと感じています。これが私が考えていることです:

[x for x in range(0,5)]

これにより、range(0,5)内の各xのxのリストが作成されます。これは私のインデックスなので、特定のリストに対してそれを行うために、上記のようにその前に別のリスト内包表記ステートメントをネストしました。

どんな助けでも大歓迎です。ありがとう!

4

6 に答える 6

2

mylist[:5]の最初の5つの要素を与えますmylist。(mylist要素が5つ未満の場合はmylist[:5]、長さのリストが返されlen(mylist)ます。)ここでリスト内包表記を使用するのはやり過ぎです。

于 2012-12-08T00:31:34.687 に答える
2

myList少なくとも5つの要素が含まれている場合、リスト内包表記を本当に使用したい場合は、次のことを試してください。

[print (mylist[i]) for i in range (0, 5)]
于 2012-12-08T00:38:53.547 に答える
1

unutbu'sが最良の解決策です。リスト内包表記を使用して実行すると、

[mylist[i] for i in range(5)]
于 2012-12-08T00:36:43.000 に答える
1

エラーが発生する理由についてmyListは、がタプルのリストである場合は、次のように確認してください。

myList = [(0, 1), (1, 2), (2, 3)]

result = []
for i in range(5):
    sub_result = []
    # Here x will be (0, 1), etc.
    for x in myList:
        # Here you are referencing the ith element of your tuple
        # If your tuple doesn't contain that many elements, you get the error
        sub_result.append(x[i]) 

したがって、リストではなくタプルにアクセスしています。他の解決策はすべてこれを修正する方法を示しているので、間違いなくそれらの1つに投票してください-これはうまくいけば、それがエラーを引き起こしている理由を理解するのに役立つでしょう:)

于 2012-12-08T00:40:04.027 に答える
0

範囲外のインデックスにアクセスしようとしています。これは、xタプルの長さが5未満であることを意味します。

次のようなデータに対して発生します[[1,2,3],[4,5,6]..]

xここになります[1,2,3]、そして[4,5,6]など

試してみるとx[5]、例外が発生します

于 2012-12-08T00:33:23.753 に答える
0

print [mylist [j] for j in [i for i in range(5)]]

@unutbuのアプローチははるかに読みやすいですが。

于 2012-12-08T00:37:41.920 に答える