Как использовать для поиска расположения объекта в списке

#python #list #indexing

Вопрос:

Моя текущая проблема заключается в том, что я хочу искать элементы в списке, но только по количеству элементов в указанном списке

 drumsound = ["0"] def AddSnare():  drumsound.append("1")  print(drumsound)   def AddTom():  drumsound.append("2")  print(drumsound)  def beat():   a = 1  for x in drumsound:  if drumsound[a] == "1":  mixer.music.load("soundfiles/snare.mp3")  mixer.music.set_volume(1)  mixer.music.play()  a  = 1    elif drumsound[a] == "2":  mixer.music.load("soundfiles/tom.mp3")  mixer.music.set_volume(1)  mixer.music.play()  a  = 1  

Моя проблема в том, могу ли я использовать в этой строке if drumsound[a] == "1": [a] переменную или способ, которым я могу сделать что-то более простое

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

1. Во-первых, drumsound[a] здесь это излишне. x уже drumsound[a] этого x == "1" было бы достаточно.

2. Если я правильно понял ваш вопрос, просто проверьте x вместо drumsound[a] .

Ответ №1:

Вы можете упростить это, имея несколько list функциональных объектов, а не какое-то магическое число ( "1" , "2" ), связанное со звуком.

В python функции являются объектами первого класса, поэтому вы можете передавать их, назначать переменным, добавлять в list s и т. Д., И на самом деле они ничего не будут делать, пока вы не используете круглые скобки () для их вызова.

Это позволяет вам делать что-то подобное:

 def play_snare(mixer):  mixer.music.load("soundfiles/snare.mp3")  mixer.music.set_volume(1)  mixer.music.play()   def play_tom(mixer):  mixer.music.load("soundfiles/tom.mp3")  mixer.music.set_volume(1)  mixer.music.play()  def beat(drumsounds, mixer):  # here func will be play_snare, play_tom, and play_snare  # because of the list defined below  for func in drumsounds:  func(mixer)  drumsounds = [] drumsounds.append(play_snare) drumsounds.append(play_tom) drumsounds.append(play_snare) beat(drumsounds, mixer)  

Когда вы повторяете a list , python делает вам одолжение и распаковывает то list , что вы повторяете.

Так:

 a = 0 for x in drumsound:  print(drumsound[a])  a  = 1  

делает то же самое, что и это:

 for x in drumsound:  print(x)