У меня проблемы с составлением списка в python - PullRequest
1 голос
/ 28 января 2020

Привет всем, я новичок в python, и у меня возникли проблемы с организацией данных.

У меня есть эти списки nuxdx, nuxdy, nuydx, nuydy , которые имеют 166 элементов (которые представляют градиенты для 166 географических точек c точек), каждый из которых имеет 1000 элементов ().

M = []
for i in range(len(nuxdx[0])):      # len(nuxdx[0]) = 1000
    for j in range(len(nuxdx)):     # len(nuxdx) = 166
        Ma = [nuxdx[j][i],(nuxdy[j][i]+nuydx[j][i])/2, (nuydx[j][i]+nuxdy[j][i])/2, nuxdx[j][i]]
        M.append(Ma)

Что я пытаюсь сделать, это выбрать первый элемент первого подсписка для каждого списка. Цель состоит в том, чтобы создать список, который содержит 1000 элементов, где каждый элемент представляет собой список из 166 элементов, где каждый элемент имеет 4 номера. То, что я хочу, это список (давайте назовем его MM), который содержит 1000 M так:

len(MM) = 1000
len(MM[0]) = 166
len(MM[0][0]) = 4


Ответы [ 3 ]

1 голос
/ 28 января 2020

Может быть, вы можете попробовать это:

MM = []
for i in range(len(nuxdx[0])):      # len(nuxdx[0]) = 1000
    M = []
    for j in range(len(nuxdx)):     # len(nuxdx) = 166
        Ma = [nuxdx[j][i],(nuxdy[j][i]+nuydx[j][i])/2, (nuydx[j][i]+nuxdy[j][i])/2, nuxdx[j][i]]
        M.append(Ma)
    MM.append(M)
0 голосов
/ 28 января 2020

Я бы использовал zip(), а также использовал бы четверки.

a = ['a1', 'a2', 'a3']
b = ['b1', 'b2', 'b3']
c = ['c1', 'c2', 'c3']
d = ['d1', 'd2', 'd3']

collect = []

for i, j, h, k in zip(a, b, c, d):
    collect.append((i, j, h, k))

print(collect)

[('a1', 'b1', 'c1', 'd1'), ('a2', 'b2', 'c2', 'd2'), ('a3', 'b3', 'c3', 'd3')]

0 голосов
/ 28 января 2020

Итак, вам нужен мульти-массив размером 1000x166x4?

В приведенном выше коде вы увидите, что в итоге вы получите 2-мерный массив размером 166000x4. Начиная с M = [], вы просто добавляете к нему список из 4 элементов для каждой комбинации `ij '. Имеет ли это смысл? Чтобы сделать то, что вы хотите с кодом выше, вам просто нужно добавить еще один список:

M = []
for i in range(len(nuxdx[0])):      # len(nuxdx[0]) = 1000
    N = []                          # list of lists (2-D)
    for j in range(len(nuxdx)):     # len(nuxdx) = 166
        Ma = [nuxdx[j][i],(nuxdy[j][i]+nuydx[j][i])/2, (nuydx[j][i]+nuxdy[j][i])/2, nuxdx[j][i]]
        N.append(Ma)
    M.append(N)                     # list of lists of lists (3-D)

Это должно сделать это.

Кроме того, вы можете захотеть использовать numpy для этого - что обеспечивает более эффективную работу массивов / мульти-массивов. Это может помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...