Найти - Пользователи
Полная версия: Найти расположение значения в списке несколько раз
Начало » Python для новичков » Найти расположение значения в списке несколько раз
1
MagentaIceberg
Есть такая задача:
Напишите программу, которая считывает список чисел lst из первой строки и число xx из второй строки, которая выводит все позиции, на которых встречается число xx в переданном списке lst.
Позиции нумеруются с нуля, если число x не встречается в списке, вывести строку “Отсутствует” (без кавычек, с большой буквы).
Позиции должны быть выведены в одну строку, по возрастанию абсолютного значения.
Sample Input 1:
5 8 2 7 8 8 2 4
8
Sample Output 1:
1 4 5

Встал в ступор по ней. Написал только такое:
 b = [int(i) for i in input().split()]
w = int(input())
y = []
if b.index(w) == 0:
    print('Отсутствует')
if b.index(w) > 0:
    y += b.index(w)
Как вывести все индексы?
xam1816
Сделай свою задачу на листке бумаги, и проследи за своими действиями,обрати внимание на свой алгоритм.Расскажи здесь как ты мыслишь
PEHDOM
MagentaIceberg
Как вывести все индексы?
никак, нет волшебной комманды “вывести все индексы”, нужно в цикл пройтись по всем элементам, и записать в отдельный список все индексы если элемент равен искомому.
подсказка: enumerate()
MagentaIceberg
xam1816
Сделай свою задачу на листке бумаги, и проследи за своими действиями,обрати внимание на свой алгоритм.Расскажи здесь как ты мыслишь
да, надо бы такую привычку завести)
MagentaIceberg
PEHDOM
мерси, обдумаю!
MagentaIceberg
PEHDOM
хватило только на такое:
 b = [int(i) for i in input().split()]
w = int(input())
y = []
if b.index(w) == False:
    print('Отсутствует')
b.enumerate(w) for i in b:
    y += b.index(w)
print (*y)

Если честно, не особо понимаю как это можно сделать корректно.
py.user.next
MagentaIceberg
Напишите программу, которая считывает список чисел lst из первой строки и число xx из второй строки, которая выводит все позиции, на которых встречается число xx в переданном списке lst.
Позиции нумеруются с нуля, если число x не встречается в списке, вывести строку “Отсутствует” (без кавычек, с большой буквы).
Позиции должны быть выведены в одну строку, по возрастанию абсолютного значения.

  
>>> def f():
...     lst = list(map(int, input().split()))
...     num = int(input())
...     out = [i for i, e in enumerate(lst) if num == e]
...     if out:
...         print(*out)
...     else:
...         print('Отсутствует')
... 
>>> f()
5 8 2 7 8 8 2 4
8
1 4 5
>>> f()
1 2 3
4
Отсутствует
>>>
MagentaIceberg
py.user.next
Выполняется, единственно, убрал создание функции, тк компилятор в курсе почему-то не принимал с ней.

Вообще интересный код, мы правда не прошли enumerate и map, но смысл синтаксиса понятен(особенно, если просто посмотреть в инете). Единственно, уточню по этой строчке: i for i, e in enumerate(lst) - не до конца понимаю работу, можете объяснить как работает синтаксис. Например, цикл на i при том, что i ни где не инициализирован, да и ‘e’ тоже не инициализирован(понимаю, что если равен num, то мы как раз и запишем индексы, но как..)?
py.user.next
MagentaIceberg
Единственно, уточню по этой строчке: i for i, e in enumerate(lst) - не до конца понимаю работу, можете объяснить как работает синтаксис. Например, цикл на i при том, что i ни где не инициализирован, да и ‘e’ тоже не инициализирован(понимаю, что если равен num, то мы как раз и запишем индексы, но как..)?
Можешь в книге Dive Into Python 3 прочитать про включения (comprehension)
https://diveintopython3.net/comprehensions.html
https://diveintopython3.net/comprehensions.html#listcomprehension

Это примеры, которые можешь у себя позапускать и поменять, чтобы понять, что на что влияет
  
>>> lst = ['a', 'b', 'c', 'd', 'e'] # добавь сюда буквы и перезапусти
>>> 
>>> list(enumerate(lst))
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e')]
>>> 
>>> for x, y in [(1, 2), (3, 4)]: # добавь сюда пары точек и перезапусти
...     print(x, y)
... 
1 2
3 4
>>> 
>>> for number, letter in enumerate(lst): # переименуй переменные number и letter и перезапусти
...     print(number, letter)
... 
0 a
1 b
2 c
3 d
4 e
>>>
>>> for i in range(3):
...     print(i)
... 
0
1
2
>>> [i for i in range(3)]
[0, 1, 2]
>>> 
>>> [i * i for i in range(5)]
[0, 1, 4, 9, 16]
>>> 
>>> [(i, i * i) for i in range(5)]
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16)]
>>>

Вообще, читай книжки, чтобы наугад не пытаться понимать синтаксис. Ты его не поймёшь наугад. А в книжках всё написано и расписано. Оно и время экономит, и знания при этом полные остаются, а не с пробелами.
MagentaIceberg
py.user.next
ого! Очень многогранный, конечно, синтаксис!

Спасибо огромное за советы и разъяснение!!!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB