在Python中,检查列表项整数是否是另一个列表中每两个项整数之间的数字?

2024-04-20 11:51:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表都包含数字,我想检查一个列表中的数字是否是另一个列表中每两个数字之间的数字?“另一个”列表有有序的数字,因此每两个数字都是一个间隔,如234、238、567、569、2134、2156。在

ListA = [200, 765, 924, 456, 231]

ListB = [213, 220, 345, 789, 12, 45]

我想检查ListA[0:]是否是介于ListB[0:1]或[2:3]之间的数字

我试过了:

^{pr2}$

但是我得到了一个“I:I+2”的语法错误(


Tags: 列表间隔数字语法错误有序listapr2listb
3条回答

如果您要做的是确保列表A中的所有项目都在列表B中的至少一个间隔内:

>>> listA = [200, 765, 924, 456, 231]
>>> listB = [213, 220, 345, 789, 12, 45]

>>> intervals = zip(*[listB[i::2] for i in range(2)])

>>> [any(low < x < high for low, high in intervals)
                    for x in listA]
[False, True, False, True, False]
for i in range(0,len(ListB)-1, 2): #offest 1 less than the length
    for x in ListA:
        if ListB[i] < x < ListB[i+1]: #check if it is between ListB's elements
            print 'within range'

至少假设我明白你想要什么。。。在

我认为这是你想要的,尽管还不太清楚:

for i in range(0, len(ListB), 2):
    for x in ListA:
        if ListB[i] < x < ListB[i+1]:
            print 'within range'

你的直觉是正确的,你可以i:i+2代表一个“范围”,但不是那样。该语法只能在切片list时使用:ListB[i:i+2]返回一个只有2个元素的较小列表,[ListB[i], ListB[i+1]],正如您所期望的那样,但是i:i+2本身是非法的。(如果你真的想,你可以写slice(i, i+2)来表示你的目标,但在这里它并没有那么有用。)

另外,根据您的描述,您希望将x与值ListB[i]和{}进行比较,而不仅仅是代码中的i和{}。在

如果要使用切片来生成范围,可以这样做,但只能间接进行,而且实际上在大多数情况下都会比较笨拙和更糟:

^{pr2}$

但这是检查半开放范围而不是开放范围,它需要创建一个表示范围的列表,并遍历整个范围,它只适用于整数。所以,这可能不是你想要的。最好只显式地使用ListB[i] < x < ListB[i+1]。在

您可能需要考虑是否有更具可读性的方法来从ListB中构建元素对的列表。如果还不知道itertools和列表理解或生成器表达式(我假设),您可能不得不编写一些非常冗长和明确的内容,但无论如何,这可能是有用的实践。在

相关问题 更多 >