Сравнить списки с несколькими элементами - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть следующий кортеж s=[(1,300),(250,800),(900,1000),(1200,1300),(1500,2100)] Мне нужно сравнить верхнюю границу списка с нижней границей следующего списка. Если нижний предел следующего списка меньше верхнего предела предыдущего списка, он должен выдать ошибку, иначе он должен пройти. Пример:

s=[(1,300),(250,800),(900,1000),(1200,1300),(1500,2100)] - Это должно выдать ошибку как 250 <300. Если это не удастся для любого, он должен немедленно выдать ошибку. </p>

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")

Но это не работает. Помоги мне здесь.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

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 в al oop:

for a,b in pairs:
    if a[1] > b[0]:
        print("fail")
    else:
        print("pass")
0 голосов
/ 13 апреля 2020

Я вижу две проблемы:

1) Вы сталкиваетесь с ошибкой «вне границ», так как последний элемент (900,1000) пытается проверить следующий элемент, который не существует.

Вы можете пропустить последний элемент, добавив [: -1] к вашему l oop.

2) Кроме того, ваше условие «если» кажется обратным. Вы, кажется, хотите сравнить 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")

См. Как l oop через все, кроме последний элемент списка? для более подробной информации.

...