问题描述
假设我有一个可迭代的对象(它可以是元组或列表)。我想从此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'>