Получение значения в списке Python, объединение диапазона с ним и проверка, находится ли это значение в другом списке - PullRequest
0 голосов
/ 09 марта 2020

У меня есть 2 списка здесь: blk и itf

blk:
    ['0/3', '0/3']

itf:

    ['0/1', '0/2', '0/3', '0/4', '0/5', '0/6', '0/7', '0/8', '0/1/1', '0/1/2', '0/1/11', '0/1/12', '0/1/123', '0/1/124', '0/1/125', '0/1/126', '0/1/127', '0/1/128', '0/2/1', '0/2/2', '0/2/126', '0/2/127', '0/2/128', '0/3/127', '0/3/128', '0/4/124', '0/4/125', '0/4/126', '0/4/127', '0/4/128', '0/5/128', '0/7/128', '0/8/1', '0/1/1/1', '0/1/2/1', '0/1/2/2', '0/1/2/3', '0/1/2/4', '0/1/11/1', '0/1/11/2', '0/1/11/3', '0/1/11/4', '0/1/12/1', '0/2/1/1', '0/2/2/1', '0/2/2/32', '0/2/2/3', '0/2/2/4', '1/1', '1/2', '1/3', '1/4', '1/5', '1/6', '1/7', '1/8', '1/9', '1/10', '2/1', '2/2', '2/3', '2/4', '2/5']

Мне нужно проверить, существует ли элемент в itf, который соответствует тому, что находится в blk с дополнительным "/" и любым число от 1 до 128 после него. Таким образом, в этом случае 0/3/127 и 0/3/128 будут совпадать и будут печататься для пользователя, в идеале. Список blk может содержать от 0/1 до 0/8.

Пока мой код выглядит примерно так:

x = range(1,128)

for item in blk:
    match = item + "/" + str(x)
    if match in itf:
        print (match + "was found")

Сейчас все, что он печатает, это пустая строка. Я не профессионал python и довольно плохо разбираюсь во вложенных циклах, поэтому я хотел бы узнать, какие ошибки я совершаю. Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 марта 2020

Если вы напечатаете match после запуска вашего кода, довольно быстро становится ясно, где что-то идет не так:

In [12]: print(match)
0/3/range(1, 128)

Что вы на самом деле хотите сделать, так это l oop через элементы range(1, 129) (обратите внимание на приращение в последнем члене - диапазон опускает последнее заданное значение), а затем добавьте их в строку:

In [14]: for item in blk:
    ...:     for x in range(1, 129):
    ...:         match = item + "/" + str(x)
    ...:         if match in itf:
    ...:             print (match + " was found")
    ...:
0/3/127 was found
0/3/128 was found
0/3/127 was found
0/3/128 was found

Вы можете рассмотреть возможность дедупликации blk, приведя его к set:

In [15]: for item in set(blk):
    ...:     for x in range(1, 129):
    ...:         match = item + "/" + str(x)
    ...:         if match in itf:
    ...:             print (match + " was found")
    ...:
0/3/127 was found
0/3/128 was found
0 голосов
/ 09 марта 2020
x = range(1,129)

for item in blk:
    for n in x: 
        match = item + "/" + str(n)
        if match in itf:
            print (match + "was found")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...