Python не может печатать определенные значения в списке

#python

#python

Вопрос:

У меня есть заданный пользователем интервал лет (например, 1998-2017), и я должен напечатать конкретное значение из списка ‘mlist’, который содержит любой из лет в данном интервале. И выведите название книги по индексу в ‘plist’. Проблема в том, что он не может найти этот конкретный год в списке, но он обязательно есть

Уже пытался сделать это, создав цикл for с диапазоном (startingIn, endingIn), но не помогло

 interval = input("Enter the range: ") #User selects specific interval

startingIn = int(interval.split('-')[0])
endingIn = int(interval.split('-')[1])

for x in range (int(startingIn), int(endingIn)):
    if x in mlist:
        value = mlist.index(x)    #mlist is the list which has years of the books
        print (value, x)       #plist is the list of books' names
    else:
        continue
  

plist = [«book1», «book2», «book3»]
mlist = [«1935», «1990», «1980»]

Он должен напечатать год и книгу, которые входят в заданный пользователем интервал

Комментарии:

1. Было бы полезно просмотреть mlist и plist. Не могли бы вы обновить свой вопрос фиктивными значениями для этих переменных?

2. Если пользователь вводит, скажем, «2000-2001», код выполняет поиск plist[2000] . plist Действительно ли есть тысячи записей?

3. Если plist это список названий книг, то plist[x] собирается вернуть the x’th, где x в тысячах. Я сомневаюсь, что ваш plist содержит так много записей.

4. @JohnGordon он проверяет между этим диапазоном, поэтому между 2000 и 2001

5. Ваш mlist содержит годы в строке. Переменная x в вашем коде является int. Вероятно, это причина, по которой mlist.index(x) ничего не возвращает. Попробуйте if str(x) in mlist: или измените значения в mlist на целые числа.

Ответ №1:

Ваша проблема в том, что mlist это список строк. Но x это целые числа, а 1935 нет "1935" , поэтому вы никогда не получите совпадение с mlist.index(x) . Попробуйте преобразовать mlist в список целых чисел.

 plist = ["book1", "book2", "book3"]
mlist = ["1935", "1990", "1980"]

interval = input("Enter the range: ") #User selects specific interval

startingIn = int(interval.split('-')[0])
endingIn = int(interval.split('-')[1])

nummlist = list(map(int, mlist))

for x in range (startingIn, endingIn 1): #no need to repeat int() here, and note  1 otherwise endingIn would not be included
    if x in nummlist:
        value = nummlist.index(x)
        print (plist[value], x)
  

У меня это работает. Он печатает:

книга 1 1935
книга 3 1980
книга 2 1990

Ответ №2:

mlist.index(x) возвращает индекс элемента, поэтому вы, вероятно, захотите получить элемент с помощью

 index = mlist.index(x)
itemYouWant = plist[index]
  

кстати:
Возможно, вам не понадобится оператор continue — в этом случае он ничего не делает.

Ответ №3:

Вы не указываете структуру списков mlist и plist , но я подозреваю, что вам следует print(plist[value], x) вместо print(plist[x], x) :

 interval = input("Enter the range: ") # example "1990-2019"

bounds = interval.split("-")

for x in range(bounds[0], bounds[1]):
    if x in mlist:
        value = mlist.index(x)    #mlist is the list which has years of the books
        print (plist[value], x)       #plist is the list of books' names