Как найти позицию в списке, определяемом другим списком? питон

#python #list

Вопрос:

Поэтому я пытаюсь выполнить функцию, которую вам дали lis1=[1,2,6,8,10] , lis2=['earth', 'sky', 'village', 'line', 'tree', 'lake', 'beach', 'dock', 'earth', 'sky', 'beach', 'eyes', 'village'] string='beach'

Я должен найти строку "beach" list 2 в позициях, заданных list1

Я обнаружил, что могу видеть в list2 положении, указанном при list1 выполнении этого, например

 def properties(w,z,y):
  loki=[]
  if y in z[w[1]]:
    loki.append(w[1])
 

Но мне нужно сделать это автоматически, потому что я не могу знать, будет ли длина list1 5 позиций или 16, есть ли способ это сделать?

Я попробовал с циклом for, но я получаю только то, что список ищет в первой позиции, но затем начнет оттуда в следующей позиции, поэтому индекс будет вне диапазона

Есть ли какой-нибудь способ решить эту проблему?

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

1. Что такое w,z,y . И длина lis1 n lis2 не одинаковы, так как вы можете проверить

Ответ №1:

 lis1=[1,2,6,8,10,150,9,15,25]
lis2=['earth', 'sky', 'village', 'line', 'tree', 'lake', 'beach', 'dock', 'earth', 'sky', 'beach', 'eyes', 'village']
string = "beach"

res = [idx for idx in lis1 if (idx<len(lis2) and lis2[idx] == string)]

print(res)

res: [6,10]
 

Ответ №2:

 for position in lis1:
    if lis2[position] == string:
        print(f'found {string} at {position}')
        break
 

Это повторит lis1 то, что содержит индексы для поиска, а затем проверит lis2 индекс.

Ответ №3:

Вот что вы можете попробовать. Также необходимо проверить наличие ошибок индекса, если индекс списка не найден.

 lis1=[1,2,6,8,10]
lis1.sort()
lis2=['earth', 'sky', 'village', 'line', 'tree', 'lake', 'beach', 'dock', 'earth', 'sky', 'beach', 'eyes', 'village'] 
string='beach'
for i in lis1:
    try:
        if lis2[i]==string:
            print(f"Found '{string}' at position '{i}'")
            
    except IndexError:
        print("List length is too short for checking")
        break
 

Ответ №4:

 lis1 = [-100, "3", 1, 78.9, None, 2, 6, 8, 10, 100]
lis2 = ['earth', 'sky', 'village', 'line', 'tree', 'lake', 'beach', 'dock', 'earth', 'sky', 'beach', 'eyes', 'village']
a_string = 'beach'

pos_found = sorted(set(lis1).intersection([i for i, v in enumerate(lis2) if v == a_string]))
print(f'"{a_string}" was found at {pos_found}')
 

Выход:

 "beach" was found at [6, 10]