迭代保持类型的元素的Python算术减法

问题描述

假设我有一个可迭代的对象(它可以是元组或列表)。我想从此iterable的元素中减去一个值,并以与输入iterable相同的类型返回结果。例如,

a=(10,7)
b=3

a-b必须导致以下元组

(7,4) 

,如果a = [10,7],则a-b必须导致以下列表

[7,4]

解决方法

您可以使用此脚本创建新的list / tuple

a = [10,7]
b = 3

a = type(a)(v-b for v in a)
print(a)

打印:

[7,4]

对于a=(10,7)打印(7,4)

,
b=(10,4)
a=[10,4]
constant=3
res = type(b)(map(lambda i: i - constant,b))
resultant = type(a)(map(lambda i: i - constant,a))

这将适用于列表元组或任何类型

,

易于使用的列表压缩

#--List
b=3
res=[i-b for i in [10,4]]
print(res,type(res))
#--[7,1] <class 'list'>
#--tuple
b=3
res=tuple([i-b for i in (10,4)])
print(res,type(res))
#(7,1) <class 'tuple'>

只需创建一个类并询问变量类型a,然后使用上面和方法中的两种方法

,

尽管所有给出的答案都是正确的,但我发现以下答案更好,因为即使输入不是可迭代的,它也可以工作:

import numpy as np

list_a=[[10,7],(10,7),10]
b=3

for a in list_a:
    c = type(a)(np.subtract(a,b))
    print(c,type(c))

它返回

[7,4] <class 'list'>
(7,4) <class 'tuple'>
7 <class 'int'>