#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
nlis2
не одинаковы, так как вы можете проверить
Ответ №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]