2013-04-28 120 views
0

我有一個元組的元組:從Python中的元組中減去元組的元組?

nums = ((4, 5, 6), (5, 6, 7), (2, 3)) 

現在我想創造一個每個數字是從「基準」數中減去一個類似的結構。對於元組的基準數字是:

baselines = (1, 0.5, 3) 

所以我想結構將是:

# want: diffs = ((3, 4, 5), (4.5, 5.5, 6.5), (-1, 0)) 

,我們有:

diffs[0] = [x - baselines[0] for x in nums[0]] 
diffs[1] = [x - baselines[1] for x in nums[1]] 
# etc. 

我怎樣才能在Python這樣做優雅?

回答

3

使用zip與發電機的表達:

In [66]: nums = ((4, 5, 6), (5, 6, 7), (2, 3)) 

In [67]: baselines = (1, 0.5, 3) 

In [68]: tuple(tuple(val-y for val in x) for x,y in zip (nums,baselines)) 
Out[68]: ((3, 4, 5), (4.5, 5.5, 6.5), (-1, 0)) 
0
>>> [[x-baselines[i] for x in nums[i]] for i in range(3)] 
[[3, 4, 5], [4.5, 5.5, 6.5], [-1, 0]] 

你可以把它元組,像這樣

>>> tuple(tuple(x-baselines[i] for x in nums[i]) for i in range(3)) 
((3, 4, 5), (4.5, 5.5, 6.5), (-1, 0))