python中的tuple_如何从Python中的元组中的每个值中减去一个?

使用生成器功能可以轻松完成任务.

table = [(2,3),(5,6),(12,20),(21,25),(28,28),(35,48),(53,55)]

def gaps_between(intervals):

prec = intervals[0][1] + 1

for L,H in intervals:

print '\nprec = %d (L,H) = (%d,%d)' % (prec,L,H)

print 'prec = %d <= L-1 = %d : %s' % (prec,L-1,prec<=L)

if prec<=L-1:

yield (prec,L-1)

prec = H + 1

print 'next prec = %d' % prec

holes = list(gaps_between(table))

print

print 'table =',table

print 'holes =',holes

在前一个答案中,我使用了在生成器中定义的迭代器.

为了避免这种情况,我在上面使用了一个策略:

定义第一个prec =第一个H = interval [0] [1].

鉴于每对(L,H)的H> = L,它导致

首先是H>首先L – 1 – >首先是>第一个L – 1.

因此,关于第一个间隔的第一个测试总是为假,而实际过程在第二个间隔开始.

prec = 3 (L,H) = (2,3)

prec = 3 <= L-1 = 1 : False

next prec = 4

prec = 4 (L,H) = (5,6)

prec = 4 <= L-1 = 4 : True

next prec = 7

prec = 7 (L,H) = (12,20)

prec = 7 <= L-1 = 11 : True

next prec = 21

prec = 21 (L,H) = (21,25)

prec = 21 <= L-1 = 20 : True

next prec = 26

prec = 26 (L,H) = (28,28)

prec = 26 <= L-1 = 27 : True

next prec = 29

prec = 29 (L,H) = (35,48)

prec = 29 <= L-1 = 34 : True

next prec = 49

prec = 49 (L,H) = (53,55)

prec = 49 <= L-1 = 52 : True

next prec = 56

table = [(2, 3), (5, 6), (12, 20), (21, 25), (28, 28), (35, 48), (53, 55)]

holes = [(4, 4), (7, 11), (26, 27), (29, 34), (49, 52)]

结果是正确的:

– 它给出了(2,3)和(5,6)之间的间隙(4,4)

– (12,20)和(21,25)之间没有差距

– (28,28)中的值28没有任何差距

OP表示间隔没有重叠和排序.

但是,如果prec< = L-1必须进行测试,否则连续的间隔会产生错误:

没有这个测试,结果将包含

…..,(7,11),(21,20),(26,27),……

.

通过此强制性测试,会发生以下间隔列表

[[8,9],[14,18],[18,32]]

[[8,9],[14,18],[19,20],[16,21],[23,32]]

这是重叠的(不是OP所说的)

没有测试就会出错,

事实上不会产生任何错误.

使用我的上述代码给出正确的间隙列表的间隔列表规则是间隔必须沿第二个元素排序.

.

用屈服范围(prec,L)代替产量(prec,L-1)将得到间隙作为范围.

例如,用holes.append((prec,L-1))替换yield(prec,L-1)允许在没有函数的情况下编写代码.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值