[英]How to update a tuple and save it new tuple in python
我有一個元組列表:
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
如何修改這些值。
元組是不可變的 ,因此您需要為所需的結果創建新的元組。 對於基於數組的操作,我強烈建議您轉到第3方庫,例如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)]
您應該生成新的元組列表
[(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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.