python-3.x 比较具有多个元素的列表

eagi6jfj  于 2023-03-31  发布在  Python
关注(0)|答案(2)|浏览(136)

我有一个元组如下s=[(1,300),(250,800),(900,1000),(1200,1300),(1500,2100)]我需要比较列表的上限和下一个列表的下限。如果下一个列表的下限小于上一个列表的上限,它应该抛出错误,否则它应该通过。示例:
s=[(1,300),(250,800),(900,1000),(1200,1300),(1500,2100)]-这应该抛出错误为250〈300。如果它失败的任何一个,它应该立即抛出错误。
s=[(1,300),(350,800),(900,1000)]-当350〉300时不应该抛出错误。
我试过这样的方法:

s=[(1,300),(250,800),(900,1000)]
s= (sorted(s))
print(s)
def f(mytuple, currentelement):
    return mytuple[mytuple.index(currentelement) + 1]
for i in s:
    j = f(s,i)
    if i[0]<j[1]:
        print("fail")
    else:
        print("pass")
esyap4oy

esyap4oy1#

zip()将列表(或任何可迭代对象)组合成一个新的可迭代对象。当最短列表耗尽时,它会停止。想象一下:

a = [1, 2, 3, 4]
b = ['a', 'b', 'c']
zipped = zip(a, b) # Gives: [(1, 'a'), (2, 'b'), (3, 'c')] 
# 4 is skipped, because there is no element remaining in b

我们可以使用它以优雅、易读的形式获取s中的所有 * 对 *:

s=[(1,300),(250,800),(900,1000)]
s= (sorted(s))
pairs = zip(s, s[1:]) # zip s from index 0 with s from index 1

现在我们有了((a0, a1), (b0, b1))形式的对,你可以很容易地比较a1 > b0是否在一个循环中:

for a,b in pairs:
    if a[1] > b[0]:
        print("fail")
    else:
        print("pass")
jmo0nnb3

jmo0nnb32#

我看到两个问题:
1)您遇到了一个越界错误,因为最后一个元素(900,1000)试图检查不存在的follow元素。
你可以通过在循环中添加[:-1]来跳过最后一个元素。
2)另外,你的“if”条件似乎是反向的,你似乎想比较i[1]和j[0],而不是i[0]和j[1]。

s=[(1,300),(250,800),(900,1000)]
s= (sorted(s))
print(s)
def f(mytuple, currentelement):
    return mytuple[mytuple.index(currentelement) + 1]
for i in s[:-1]:
    j = f(s,i)
    if i[1]>j[0]:
        print("fail")
    else:
        print("pass")

有关详细信息,请参见How to loop through all but the last item of a list?

相关问题