Я пытался заставить Python 2.7 отображать что-либо из списка (или строки, кортежа и т. Д.), Если этот список содержит определенные элементы в определенных позициях.

Скажем, я знаю, что для списка l l[1] должно быть 3, l[2] должно быть 1, а l[5] должно быть {{X6 } } . Я хочу напечатать l, если эти условия выполняются, но я застрял при написании функции contains_at.

indexes = (1, 2, 5)
elements = (7, 1, 8)

l1 = [2, 7, 1, 8, 2, 8, 1]
l2 = [3, 1, 4, 1, 5, 9, 2, 6, 5]


def print_if_contains_at(l, idxs, elts):
    # some function that returns True if I should print the list
    if contains_at(l, idxs, elts):
        print(l)

# prints the entire list l1
print_if_contains_at(l1, indexes, elements)


# prints nothing, since l2 doesn't contain the correct pattern of elements
print_if_contains_at(l2, indexes, elements)
-2
Travis Wells 18 Апр 2019 в 23:23

2 ответа

Лучший ответ

Вот рабочий contains_at. Прочитайте учебные руководства по спискам и zip, чтобы понять, что он делает.

indexes = (1, 2, 5)
elements = (7, 1, 8)

l1 = [2, 7, 1, 8, 2, 8, 1]
l2 = [3, 1, 4, 1, 5, 9, 2, 6, 5]


def contains_at(l, idxs, elts):
    return all(l[idx] == elt for idx, elt in zip(idxs, elts))


def print_if_contains_at(l, idxs, elts):
    if contains_at(l, idxs, elts):
        print(l)


print_if_contains_at(l1, indexes, elements)
print_if_contains_at(l2, indexes, elements)

# prints only [2, 7, 1, 8, 2, 8, 1]

Попробуйте онлайн!

0
lirtosiast 27 Июл 2019 в 20:57

Самое близкое решение, которое я могу придумать, - это самое жесткое и негибкое решение, которое выполняет ту же работу. Это будет работать для небольшого количества списков, однако было бы исчерпывающим написать множество шагов.

a = input('Enter the string')

b,c,d = input('Enter the the three index elements you are looking for')

    if a in b[0:3]:

                  print(string)
0
Travis Wells 21 Апр 2019 в 18:56