【问题标题】:How to update a tuple and save it new tuple in python如何更新元组并将其保存在python中的新元组
【发布时间】:2018-12-20 11:53:40
【问题描述】:

我有一个元组列表:

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,因此第一个和第三个元素将乘以 300,第 0 和第二个元素将乘以 200,并将这些值保存在它们的索引中。但这样做会给我以下错误:

TypeError: 'tuple' object does not support item assignment

如何修改这些值。

【问题讨论】:

    标签: python arrays list tuples


    【解决方案1】:

    Tuples are immutable,所以你需要为你想要的结果创建新的元组。对于基于数组的操作,我强烈建议您使用 3rd 方库,例如 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)]
    

    【讨论】:

      【解决方案2】:

      你应该生成新的元组列表

      [(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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-25
        • 2022-12-09
        • 2015-10-17
        • 1970-01-01
        • 1970-01-01
        • 2019-01-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多