gpt4 book ai didi

python - 负边界切片

转载 作者:行者123 更新时间:2023-11-28 19:15:08 25 4
gpt4 key购买 nike

我有两个长度为 n 的元组,我需要检查相同位置的所有元素是否相同,除了位置 w 的元素。这是我写的:

if all(tup1[i] == tup2[i] for i in xrange(n) if i != w):
...

为了避免循环(因为这段代码会被多次使用),我尝试使用切片。不幸的是,这不起作用:

if tup1[w-1:w-n:-1] == tup2[w-1:w-n:-1]:
...

我有义务写这样的东西吗?

if tup1[:w-1] == tup2[:w-1] and tup1[w+1:] == tup2[w+1:]

有没有更优雅的方法?

或者循环和切片都不好并且有更好的方法来获得我正在寻找的结果? (我不能使用过滤器,因为可能有元素与位置 w 的元素具有相同的值)

最佳答案

我认为您已经找到了最佳解决方案:

 tup1[:w-1] == tup2[:w-1] and tup1[w+1:] == tup2[w+1:]

如果元组非常长并且您不想复制数据并且想要提前结束行为,则可以使用 itertools运算符:

>>> from operator import eq
>>> from itertools import imap
>>> w = 5
>>> t1 = (10, 20, 30, 40, -1, 50, 60, 70)
>>> t2 = (10, 20, 30, 40, -1, 50, 60, 70)
>>> it1, it2 = iter(t1), iter(t2)
>>> all(imap(eq, islice(it1, w-1), islice(it2, w-1))) \
and (next(it1, True) or True) and (next(it2, True) and True) \
and all(imap(eq, it1, it2))
True

这是大量的设置工作,逐步不如元组切片快,但它确实避免了复制所有数据,并且它确实有一个早期输出。

在非极端情况下,我会坚持使用您的双切片元组相等解决方案。

关于python - 负边界切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34451837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com