1

行列の n 番目の文字を読み取る最も簡単な方法は何ですか?

これは単純な for ループで可能だと思っていましたが、今のところ運がありません。これまでのところ、私ができる最善のことは、正確ではないカウントを使用することです。

matrix = [[1, 3, 5, 2, 6, 2, 4, 1], [2, 6, 1, 6, 2, 5, 7], [1, 6, 2, 6, 8, 2, 6]]

count = 0
for n in matrix:
     print matrix[count][nth]
     count += 1

例: すべての行の 0 番目の数字を読み取ります: 1、2、1。 すべての行の 4 番目の数字を読み取ります: 6、2、8。

4

9 に答える 9

2

これは、異なる長さの行を処理するものであり(あなたの例のように)、Pythonの負のインデックスのシーケンスの終わりに対する特別な解釈をサポートします(それらをに変更することによりlen(s) + n):

NULL = type('NULL', (object,), {'__repr__': lambda self: '<NULL>'})()

def nth_elems(n):
    abs_n = abs(n)
    return [row[n] if abs_n < len(row) else NULL for row in matrix]

matrix = [[1, 3, 5, 2, 6, 2, 4, 1], [2, 6, 1, 6, 2, 5, 7], [1, 6, 2, 6, 8, 2, 6]]

print nth_elems(0)   # [1, 2, 1]
print nth_elems(6)   # [4, 7, 6]
print nth_elems(7)   # [1, <NULL>, <NULL>]
print nth_elems(-1)  # [1, 7, 6]
于 2013-11-04T03:14:29.537 に答える
1

あなたの for ループは、あなたが期待していることをしていない可能性があります。n は整数ではありません。現在の行です。あなたがやりたかったことは次のとおりだと思います:

for row in matrix:
    print row[0], row[4]

これは、

1 6
2 2
1 8

また、厳密に言えば、matrix はリストのリストです。実際に行列を作成するには、numpy を使用する必要がある場合があります。

于 2013-11-04T02:24:09.817 に答える
1
In [1]: matrix = [[1, 3, 5, 2, 6, 2, 4, 1], [2, 6, 1, 6, 2, 5, 7], [1, 6, 2, 6, 8, 2, 6]]

In [2]: nth=0

In [3]: [row[nth] for row in matrix]
Out[3]: [1, 2, 1]

In [4]: nth=4

In [5]: [row[nth] for row in matrix]
Out[5]: [6, 2, 8]
于 2013-11-04T02:18:13.683 に答える
1

もしかしてこの先?

column = [row[0] for row in matrix]

(0 番目の要素の場合)

于 2013-11-04T02:18:18.187 に答える
1

リスト内包表記を使用したソリューションは次のとおりです。

[x[0] for x in matrix]

これは基本的に次のようになります。

for x in matrix:
    print x[0]

関数にすることもできます:

def getColumn(lst, col):
    return [i[col] for i in lst]

デモ:

>>> matrix = [[1, 3, 5, 2, 6, 2, 4, 1], [2, 6, 1, 6, 2, 5, 7], [1, 6, 2, 6, 8, 2, 6]]
>>> def getColumn(lst, col):
    return [i[col] for i in lst]

>>> getColumn(matrix, 0)
[1, 2, 1]
>>> getColumn(matrix, 5)
[2, 5, 2]

お役に立てれば!

于 2013-11-04T02:18:37.237 に答える
1

ここでは、リスト内包表記がうまく機能します。

>>> matrix = [[1, 3, 5, 2, 6, 2, 4, 1], [2, 6, 1, 6, 2, 5, 7], [1, 6, 2, 6, 8, 2, 6]]
>>> # Get all the 0th indexes
>>> a = [item[0] for item in matrix]
>>> a
[1, 2, 1]
>>> # Get all the 4th indexes
>>> b = [item[4] for item in matrix]
>>> b
[6, 2, 8]
>>>
于 2013-11-04T02:19:00.080 に答える
1

郵便番号を使用:

>>> matrix = [[1, 3, 5, 2, 6, 2, 4, 1], [2, 6, 1, 6, 2, 5, 7], [1, 6, 2, 6, 8, 2, 6]]
>>> zip(*matrix)[0]
(1, 2, 1)
>>> zip(*matrix)[4]
(6, 2, 8)
于 2013-11-04T04:47:46.047 に答える
1

Python のリストは、このように使用することを意図していません。データが十分に大きい場合、リスト内包表記を使用すると、メモリと CPU の両方の問題が発生する可能性があります。これが問題になる場合は、 numpyの使用を検討してください。

于 2013-11-04T02:46:03.740 に答える