Как Вы извлекаете столбец из многомерного массива?

Единственный способ воспроизвести вашу ошибку - это создать код непосредственно в оболочке IDLE и закрыть всплывающее корневое окно перед созданием кнопки.

enter image description here

Тем не менее, очень странно писать GUI в командной консоли следующим образом. Если вы не закрываете окно tkinter, код работает нормально. Однако разработку GUI следует выполнять в редакторе в файле .py и запускать сразу. Простое решение состоит в том, чтобы не закрывать корневое окно, пока все остальное в графическом интерфейсе не было добавлено.

Надлежащее решение - построить графический интерфейс в файле .py, а затем запустить его.

Я не уверен, почему вы говорите, что редактор не работает для вас. Когда я копирую ваш точный код, он прекрасно работает с моей стороны:

enter image description here

Все, что говорит, что вам действительно не нужно создавать свой код в Python IDLE. Было бы намного лучше использовать что-то вроде PyCharm или Eclipse / PyDev. Это мои инструменты Go to IDE.

Стоит отметить, что в Python IDLE не будет запускать код из редактора, пока вы не сохраните файл .py.

Хотя в Python IDLE не требуется 100%, mainloop() является обязательным требованием для корректной работы tkinter. Вне Python IDLE большинство других сред IDE требуют mainloop(), поэтому рекомендуется всегда включать его.

import tkinter as tk

root = tk.Tk()
b = tk.Button(root, text='button')
b.pack()
root.mainloop()

213
задан Jim G. 31 January 2016 в 09:29
поделиться

4 ответа

array = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]

col1 = [val[1] for val in array]
col2 = [val[2] for val in array]
col3 = [val[3] for val in array]
col4 = [val[4] for val in array]
print(col1)
print(col2)
print(col3)
print(col4)

Output:
[1, 5, 9, 13]
[2, 6, 10, 14]
[3, 7, 11, 15]
[4, 8, 12, 16]
0
ответ дан 23 November 2019 в 04:27
поделиться

Просто использование транспонирует (), затем можно получить столбцы, столь легкие, как Вы получаете строки

matrix=np.array(originalMatrix).transpose()
print matrix[NumberOfColum]
0
ответ дан 23 November 2019 в 04:27
поделиться

Оператор itemgetter тоже может помочь, если вам нравится python в стиле map-reduce, а не понимание списков, для небольшого разнообразия!

# tested in 2.4
from operator import itemgetter
def column(matrix,i):
    f = itemgetter(i)
    return map(f,matrix)

M = [range(x,x+5) for x in range(10)]
assert column(M,1) == range(1,11)
8
ответ дан 23 November 2019 в 04:27
поделиться

Could it be that you're using a NumPy array? Python has the array module, but that does not support multi-dimensional arrays. Normal Python lists are single-dimensional too.

However, if you have a simple two-dimensional list like this:

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

then you can extract a column like this:

def column(matrix, i):
    return [row[i] for row in matrix]

Extracting the second column (index 1):

>>> column(A, 1)
[2, 6]

Or alternatively, simply:

>>> [row[1] for row in A]
[2, 6]
161
ответ дан 23 November 2019 в 04:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: