Найти - Пользователи
Полная версия: Генератор с несколькими переменными
Начало » Python для новичков » Генератор с несколькими переменными
1
vanvanov
Добрый день.

Генераторы и итераторы знаю не очень хорошо, может, вы поможете.
Мне нужно сравнить 2 списка (с помощью in), где первый список полностью включает второй список, и вернуть номер элемента 1-го списка, с которого идет совпадение. Например,
lst1 = ['мама', 'мыла', 'раму,', 'папа', 'кушал', 'борщ']
lst2 = ['раму', 'папа']

Нестрогое совпадение (in) нужно для того, чтобы, например, игнорировать пунктуацию.

На данный момент собираюсь решить задачу с помощью выражения
par = [x for x in range(len(lst1)) if lst2[0] in lst1[x:x+len(lst2)][0]]
Однако, есть загвоздка: я не знаю, что нужно поставить вместо
lst2[0]
, чтобы находилось не только 1-е слово из 2-го списка, а вообще все слова.

Пробовал еще такой код.
class MyIter:
	def __init__(self, iter, amp=1):
		self.iter = iter
		self.amp = amp
	def __iter__(self):
		for i in self.iter:
			yield i * self.amp
	def __call__(self):
		return iter(self)
		
lst1 = 'мама мыла раму, папа кушал борщ'
lst2 = 'раму папа'
lst1 = lst1.split(' ')
lst2 = lst2.split(' ')
iterable = MyIter(range(len(lst2)))
y = iterable()
par = [x for x in range(len(lst1)) if lst2[next(y)] in lst1[x:x+len(lst2)][0]]
На него получаю StopIteration без объяснения ошибки.

Поможете?
FishHook
vanvanov
На него получаю StopIteration без объяснения ошибки.
Поможете?

StopIteration - это не та ошибка, которую надо как-то объяснять, эта ошибка возникает, когда вы пытаетесь вызвать next у итератора, который “закончился”.
next(iterator)
Retrieve the next item from the iterator by calling its next() method. If default is given, it is returned if the iterator is exhausted, otherwise StopIteration is raised.
New in version 2.6.

в инит своего класса вы передаете range длиной в длину списка lst2.
потом вы делаете цикл по списку lst1 и на каждой итерации вызываете next для своего объекта. Постольку поскольку lst1 длиннее чем lst2, вы получите ошибку. Вы бы сначала с алгоритмом разобрались, напишите программу без генераторов, list comprehension и прочих украшений, тупо на форах.
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