0

基本的に、多次元リストから新しいリストにデータを抽出しようとしています。このコードは私が望むことを行いますが、元のリストをループせずにこの結果を取得するより良い方法があるかどうか疑問に思っていますか?

aa = [
    ["a", "aa", "aaa"],
    ["b", "bb", "bbb"],
    ["c", "cc", "ccc"],
]
b = []
for a in aa:
    b.append(a[1])
b
>> Result: ['aaa', 'bbb', 'ccc']
4

4 に答える 4

3
>>> aa = [["a", "aa", "aaa"],
          ["b", "bb", "bbb"],
          ["c", "cc", "ccc"]]
>>> b = zip(*aa)[2]
>>> print b
['aaa', 'bbb', 'ccc']

私はzipまだリストを反復していると確信していますが、これは望ましい結果を得るためのはるかに簡潔な方法です.

Python 3 ではzipイテレータを返すため、最初にリストに変換する必要があることに注意してください。

list(zip(*aa))[2]

またはリスト内包表記を使用します

[i[2] for i in aa]
于 2013-03-02T04:59:57.847 に答える
2

リスト内包表記を使用する方法は次のとおりです。

>>> aa = [
["a", "aa", "aaa"],
["b", "bb", "bbb"],
["c", "cc", "ccc"],
]
>>> b = [i[2] for i in aa]
>>> print b
['aaa', 'bbb', 'ccc']
于 2013-03-02T04:59:35.233 に答える
1

Numpy でもできます:

>>> >>> a = numpy.array([
...     ["a", "aa", "aaa"],
...     ["b", "bb", "bbb"],
...     ["c", "cc", "ccc"],
... ])
>>> a[:,2]
    array(['aaa', 'bbb', 'ccc'], 
      dtype='|S3')
于 2013-03-02T05:02:29.843 に答える
1

リスト内包表記を使用できます:

b = [aa[i][2] for i in range(len(aa))] 

またはブレンダーが提案したように速くて短い

b = [a[2] for a in aa]
于 2013-03-02T04:58:41.513 に答える