Есть отрывок
rank['contains_genre'] = [all( y in x for y in genres) for x in rank.genres]
rank['contains_genre']-это новый столбик в базе
rank.genres-список жанров в строке
genres-это входные данные
это возвращает True или False
но я не очень понял, как она работает, поэтому сделал
a=[2,4,3]
b=[3,2]
c=[(y in x for y in b) for x in a]
с
[. at 0x0000019D65F19D48>,
. at 0x0000019D65F19CC8>,
. at 0x0000019D65F19DC8>]
Как я понял, сначала берется x элемент из 'a',допустим, первый-2
дальше берется элемент Y из 'b',это 3,
а потом y in x
это что? сравнение или нет?
3 in 2 -False
берем слудеющий элемент из 'b'
2 in 2 по логике True
Но я попробовал также
if 2 in 2:
print('yes')
argument of type 'int' is not iterable
2)я также посмотрел все значения 'c' у меня почему-то False
Python
Как работает эта функция?
По поводу того, что вы тестируете.
Ваш с - список функций-генераторов, каждая из которых соответствует одному x из а. В этом легко убедиться, выводя x в элементе списка:
[(x, (y in x for y in b)) for x in a]
Важно, что генераторы не вызываются сразу, а только при необходимости, например:
for i in c[0]: print(i)
или
all(c)
Но у вас генераторы с ошибкой: 2 in 2 не работает!
В исходном использовались строки: '2' in '2' - это True.
Попробуйте с
a='243'
b='32'
Ваш с - список функций-генераторов, каждая из которых соответствует одному x из а. В этом легко убедиться, выводя x в элементе списка:
[(x, (y in x for y in b)) for x in a]
Важно, что генераторы не вызываются сразу, а только при необходимости, например:
for i in c[0]: print(i)
или
all(c)
Но у вас генераторы с ошибкой: 2 in 2 не работает!
В исходном использовались строки: '2' in '2' - это True.
Попробуйте с
a='243'
b='32'
[all(y in x for y in genres) for x in rank.genres]
(y in x for y in genres) — генератор, проверяет поэлементно присутствие жанра из входящих данных в другом списке
all() возвращает True, только в случае, когда все жанры присутствуют
в итоге получается список из True или False подобных проверок для каждой записи из rank.genres
(y in x for y in genres) — генератор, проверяет поэлементно присутствие жанра из входящих данных в другом списке
all() возвращает True, только в случае, когда все жанры присутствуют
в итоге получается список из True или False подобных проверок для каждой записи из rank.genres
Ну смысл тебе это не даст если и узнаешь тут а все равно спрашивать устанешь не проще учить самому и перестать зависеть от знатоков в скобках мэйл ру
for y in x, ты сравниваешь есть ли у в одном из элементов из списка а. Верно он дает ошибку, потому что генератор работает только с перебираемыми объектами. В твоем случае элемент из а - это число. А ты хочешь сделать по нему проход.
Заработало бы например в таком варианте: (y in range(x) for y in b)
Заработало бы например в таком варианте: (y in range(x) for y in b)
Похожие вопросы
- арументы (изменяемых объектов) функций в 1с и Python
- Сколько значений может возвращать функция?
- Параметры функций python (я чайник)
- В чем разница между этими двумя вариантами написания кода функции?
- Python не работает функция
- Написать функцию. Помогите пожалуйста!
- Функции и аргументы
- Смысл return в функциях
- Функции в Python, как понять?
- Python.Какой функцией можно вывести КОЛИЧЕСТВО четных элементов в массиве?
genres=['Drama', 'Crime']
b=['Drama', 'Action', 'Crime', 'Thriller']
c=[any( y in x for y in genres) for x in b],
в таблице с теми же данными выход будет один, а тут их 4
genres=['Drama', 'Crime']
b=[['Drama', 'Action'], ['Crime', 'Thriller']]
c=[any( y in x for y in genres) for x in b],
получится False False
2)если 5 значений? значит на 3 список будет только одно значение? тогда будет сравниваться 2 с 1 значением, что должно вызвать ошибку?
Вы не поняли, я говорю не про всю таблицу, а про одну строку
['Drama', 'Action', 'Crime', 'Thriller'] -это все в одном индексе.
это не два индекса, а один.
И снова в начало к непониманию пришли ((((