Przykład:

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

Robiąc coś takiego jak a[:][0], spodziewam się, że da mi 1 elementy w każdym [1,4,7]

Jednak dostaję [1,2,3]. Zawsze mogę to zrobić.

def column(array,index):
    result = []
    for row in array:
        result.append(row[index])
    return result

Ale zastanawiałem się: czy jest mądrzejszy sposób na to?

0
j_juggernaut 29 wrzesień 2011, 00:18

4 odpowiedzi

a[:][0] nie działa, ponieważ a[:] Kopia a. [0] następnie otrzymuje pierwszą wartość z tej kopii, która jest [1,2,3]

Zamiast tego użyj a Lista Rozumienie:

a = [[1,2,3],[4,5,6],[7,8,9]]
col = [row[0] for row in a] # => [1,4,7]
3
Community 23 maj 2017, 12:15

DE facto standardowy sposób manipulowania macierzy w taki sposób jest użycie dedykowanego Pakiet numpy.

Rzeczy działają tak, jak chcesz, z numpy:

>>> import numpy
>>> a = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a[:,0]
array([1, 4, 7])

W rzeczywistości celem Numpy jest zapewnienie potężnych manipulacji tablic.

2
Eric O Lebigot 28 wrzesień 2011, 20:20

Możesz także użyć jednej linii do pętli, ale jest taki sam jak to, co już wykonujesz:

a = [[1,2,3],[4,5,6],[7,8,9]]
result = [item[0] for item in a]
2
aweis 28 wrzesień 2011, 20:22

Trochę zrozumienia rozumienia wykonuje pracę:

a = [[1,2,3],[4,5,6],[7,8,9]]
col = [c[0] for c in a]

Brak pojęcia o implikacjach prędkości.

1
John Keyes 28 wrzesień 2011, 20:21