【问题标题】:How can I add a number to each element of a tuple?如何为元组的每个元素添加一个数字?
【发布时间】:2018-07-26 18:39:23
【问题描述】:
hid = []
for counter,value in enumerate(alist):
    idx1 = np.where(attr['xval'].values == value[0])  #Find Serial index 
    idx2 = np.where(attr['xval'].values == value[1])
    hid.append(idx1)
    hid.append(idx2)

这给了我这个hid

[(array([7467]),),
 (array([7473]),),
 (array([7403]),),
 (array([7410]),),
 (array([7386]),),
 (array([7409]),),
 (array([7380]),),
 (array([7439]),),]

所有,我想要的是拥有这些值的列表/数组并将1 添加到每个值。

print(idx1[0])+1

Error: TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

有没有更好的方法来做到这一点?由于元组是不可变的,我该怎么做?

列表

[array([511, 517], dtype=int32),
 array([447, 454], dtype=int32),
 array([430, 453], dtype=int32),
 array([424, 483], dtype=int32)]

【问题讨论】:

  • 为什么要创建hid,然后使用print(idx1[0])+1
  • print(idx1[0]) 什么也不返回。建议:去掉多余的信息,只提供你想要的。我不明白你在问什么。
  • 是的,有两个问题。 +1 需要在 print() 内部,但我也不明白为什么要创建 hid 然后开始引用 idx1。我不确定你要做什么
  • 元组是不可变的,因为它的对象指针不能更改。但是如果这些对象本身是可变的,它们就可以被改变 - 就地。

标签: python arrays list numpy tuples


【解决方案1】:

numpy 将在每个数组上广播添加一个标量

alst = [np.array([511, 517], dtype=np.int32),
 np.array([447, 454], dtype=np.int32),
 np.array([430, 453], dtype=np.int32),
 np.array([424, 483], dtype=np.int32)]

alst
Out[4]: [array([511, 517]), array([447, 454]), array([430, 453]), array([424, 483])]


[ary + 1 for ary in alst]
Out[6]: [array([512, 518]), array([448, 455]), array([431, 454]), array([425, 484])]

【讨论】:

    【解决方案2】:

    hid = [(array([7467]),),
           (array([7473]),),
           (array([7403]),),
           (array([7410]),),
           (array([7386]),),
           (array([7409]),),
           (array([7380]),),
           (array([7439]),)]
    

    现在,每个元素都是一个列表,所以 hid 是一个列表列表。如果那是您想要的,没问题,但如果您想将其转换为平面列表,请使用 hid = np.array(hid).flatten(),以获得类似 hid = [7467, 7473, 7403, 7410, 7386, 7409, 7380, 7439] 的平面数组。

    要使用 +1 打印每个值,只需

    hid_plus_one = tuple(np.array(hid)+1)
    print(hid_plus_one)
    

    或者

    hid_plus_one = tuple(v+1 for v in hid)
    print(hid_plus_one)
    

    也就是说,如果你想把它作为一个元组,或者你可以跳过tuple(..)-part

    【讨论】:

    • 不客气,我添加了一个小改动来解决您拥有数字数组列表而不仅仅是数字列表的问题。
    猜你喜欢
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 2022-11-03
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多