Как обновить кортеж и сохранить новый кортеж в python - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть список кортежей:

my_list = [(0.12497007846832275, 0.37186527252197266, 0.9681450128555298, 0.5542989373207092), 
           (0.18757864832878113, 0.6171307563781738, 0.8482183218002319, 0.8088157176971436), 
           (0.06923380494117737, 0.2164008915424347, 0.991775393486023, 0.41364166140556335)]

Я хочу умножить каждый нечетный индексный элемент кортежа на 300, таким образом, 1-й и 3-й элемент будут умножены на 300, а 0-й и 2-й элемент будут умножены на200 и сохраните эти значения в их индексе.Но при этом выдает ошибку ниже:

TypeError: 'tuple' object does not support item assignment

Как мне изменить эти значения.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Кортежи неизменны , поэтому вам нужно будет создавать новые кортежи для достижения желаемого результата.Для манипуляций на основе массива я настоятельно рекомендую вам перейти на стороннюю библиотеку, такую ​​как NumPy:

import numpy as np

A = np.array(my_list)
A *= np.tile([200, 300], A.shape[1] // 2)

print(A)

array([[ 24.99401569, 111.55958176, 193.62900257, 166.2896812 ],
       [ 37.51572967, 185.13922691, 169.64366436, 242.64471531],
       [ 13.84676099,  64.92026746, 198.3550787 , 124.09249842]])

Но если вы настаиваете на использовании списка кортежей, вы можете использовать понимание списка со словаремотображение и enumerate:

d = {0: 200, 1: 300}

res = [tuple(val * d[idx % 2] for idx, val in enumerate(tup)) for tup in my_list]

print(res)

[(24.99401569366455, 111.5595817565918, 193.62900257110596, 166.28968119621277),
 (37.515729665756226, 185.13922691345215, 169.6436643600464, 242.64471530914307),
 (13.846760988235474, 64.92026746273041, 198.3550786972046, 124.092498421669)]
0 голосов
/ 20 декабря 2018

вы должны сгенерировать новый список кортежей

[(el[0]*200, el[1]*300, el[2]*200, el[3]*300) for el in my_list]

, и вы можете выполнять итерации для четных и нечетных индексов

[tuple(el * (200 if idx % 2 == 0 else 300) for idx, el in enumerate(tup)) for tup in my_list]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...