Как добавить в многомерных массивах с помощью Python? - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть два 1-D массива:

tminus = [219 220 225 226 227 332]
tplus = [221 222 227 228 229 334]

И 2-D массив:

t = [[222 224 228 244],[264 280 283 255 346]]

Как добавить t для значений, которые находятся междуtminus и tplus?Я пытаюсь сохранить t как двумерный массив.Я попытался:

time = []
for k in range(len(tminus)):
    for i in range(len(t)):
        for j in range(len(t[i])):
            if tminus[k] <= t[j] <= tplus[k]:
                time.append(t[j])
print time

Но все, что я получил, это пустой список.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Я не совсем уверен, что это то, что вы ищете, но, насколько я понимаю, это должно решить проблему.

index = 0
for i in range(0,len(t)):
    for j in range(0,len(t[index])):
        if max(tminus) <= t[i][j] <= min(tplus):
            time.append(t[i][j])
    index +=1
return time
0 голосов
/ 02 февраля 2019

В этой строке:

if tminus[k] <= t[j] <= tplus[k]:

Обратите внимание, что вы вызываете t[j], который найдет j-й элемент внутри t.Тем не менее, t[j] всегда будет списком, так как t является 2D-массивом.

Чтобы перебрать подсписки (t[i]) внутри t, используйте

t[i][j]

Получает j -й элемент в i -м элементе в t.

Например, если i равно 0 и j равно 0, t[j] будетверните [222, 224, 228, 244], и вы не можете сравнить int с list.Вместо этого t[i][j] вернет 222, к чему вы стремились.

Поскольку вы также хотите, чтобы форма t оставалась неизменной, создайте временную переменную (appendList),добавьте значения к этому, затем добавьте весь список к t.

Однако, с вашим текущим кодом, он создаст ненужные списки, так как он создаст один для каждого элемента в tminus.Чтобы избежать этого, вы можете переключать порядок циклов for, чтобы он создавал только appendList.Кроме того, это может привести к тому, что одно число будет добавлено несколько раз, поэтому мы передаем его в set(), чтобы удалить дубликаты, а затем передаем его в list(), чтобы снова превратить его в список.

Обновленный код:

tminus = [219, 220, 225, 226, 227, 332]
tplus = [221, 222, 227, 228, 229, 334]
t = [[222, 224, 228, 244],[264, 280, 283, 255, 346]]

time = []
for i in range(len(t)): # Iterate over t
    appendList = [] # Stores values to be appended to time
    for j in range(len(t[i])): # Iterate over the sublists in t
        for k in range(len(tminus)): # Iterate over tminus
            if tminus[k] <= t[i][j] <= tplus[k]: # Check value
                appendList.append(t[i][j]) # Append value to appendList
    appendList = list(set(appendList)) # Remove duplicates
    time.append(appendList) # Append entire list to time
print(time)

Это дает результат: [[228, 222], []]

Предостережения:
- Если t имеет повторяющиеся элементы, останется только один из них
- Порядокпотерян при переходе в set()

...