Как найти элемент в списке

#list #elements #items

#Список #элементы #Товары

Вопрос:

Я новичок и работаю над этим уже неделю, но не могу найти никакого решения. Я надеюсь, что кто-нибудь может помочь мне разобраться в этом.

Как я могу найти элементы в списке — listitems и вывести их элементы по отдельности?

 listitems = ['Beer, Chicken', 'Cake, Chocolate', 'Lemon with ci, Chicken', 'Beer, Beer, Cake, Chocolate']
 

Могу ли я в любом случае вычислить соответствующую еду в списке поступлений?

Пока я могу найти продукты только для ОДНОГО элемента. Мой код выглядит следующим образом:

Я также вычислил другой список каждого элемента для сравнения.

 eachitems = ['Beer', 'Cake', 'Chocolate', 'Lemon with ci', 'Chicken']
 

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

1. каковы критерии для двух продуктов, которые должны быть связаны. откуда я знаю, что торт ассоциируется и с пивом, и с шоколадом?

Ответ №1:

Я бы лично использовал словарь на основе ключей для каждого элемента со связанными элементами в качестве их значений, вам также было бы намного проще получить желаемые результаты, не совсем уверен, что знаю, как я мог бы сделать это только из списка, который вы создали.

Из вашего исходного кода добавьте «print (combi) «, » print (checklist) » и » print (correlatedlist) » в конце, и вы увидите, что на самом деле он не добавляет его так, как вы хотите.

Ответ №2:

В Python 3.5:

 import itertools

listOfStrings = ['Beer, Chicken', 'Cake, Chocolate', 'Lemon with ci, Chicken', 'Beer, Beer, Cake, Chocolate']
print ('Original list:', listOfStrings)
print ()

listOfLists = [group.replace (', ', ',') .split (',') for group in listOfStrings]
print ('Turned into list of lists:', listOfLists)
print ()

allFoods = set (itertools.chain (*listOfLists))
print ('All individual foods:', allFoods)
print ()

listOfSets = [set (group) for group in listOfLists]
print ('A list of sets is handy, since sets contain no duplicates:', listOfSets)
print ()

dictOfFoods = dict ([[food, set ()] for food in allFoods])
print ('Prepare a dictionary, where we can put the associated foods:', dictOfFoods)
print ()

for food in dictOfFoods:
    for foodSet in listOfSets:
        if food in foodSet:
            dictOfFoods [food] .update (foodSet)
    dictOfFoods [food] .remove (food)
print ('The dictionary is now filled:', dictOfFoods)
print ()

for food in dictOfFoods:
    print ('People who buy', food, 'also buy:')
    for otherFood in dictOfFoods [food]:
        print (otherFood)
    print ()
 

Выведет:

 Original list: ['Beer, Chicken', 'Cake, Chocolate', 'Lemon with ci, Chicken', 'Beer, Beer, Cake, Chocolate']

Turned into list of lists: [['Beer', 'Chicken'], ['Cake', 'Chocolate'], ['Lemon with ci', 'Chicken'], ['Beer', 'Beer', 'Cake', 'Chocolate']]

All individual foods: {'Chocolate', 'Lemon with ci', 'Chicken', 'Cake', 'Beer'}

A list of sets is handy, since sets contain no duplicates: [{'Chicken', 'Beer'}, {'Chocolate', 'Cake'}, {'Chicken', 'Lemon with ci'}, {'Chocolate', 'Cake', 'Beer'}]

Prepare a dictionary, where we can put the associated foods: {'Chocolate': set(), 'Lemon with ci': set(), 'Cake': set(), 'Beer': set(), 'Chicken': set()}

The dictionary is now filled: {'Chocolate': {'Cake', 'Beer'}, 'Lemon with ci': {'Chicken'}, 'Cake': {'Chocolate', 'Beer'}, 'Beer': {'Chocolate', 'Chicken', 'Cake'}, 'Chicken': {'Lemon with ci', 'Beer'}}

People who buy Chocolate also buy:
Cake
Beer

People who buy Lemon with ci also buy:
Chicken

People who buy Cake also buy:
Chocolate
Beer

People who buy Beer also buy:
Chocolate
Chicken
Cake

People who buy Chicken also buy:
Lemon with ci
Beer
 

Если вы не хотите использовать itertools и *, вы также можете создавать цикл в цикле, чтобы обходить все элементы listOfLists и добавлять их в allFoods, которые вы изначально делаете пустыми.

Ответ №3:

Мне потребовалось некоторое время, чтобы точно понять, чего вы хотели, но это рабочее решение.

 listitems = ['Beer, Chicken', 'Cake, Chocolate', 'Lemon with ci, Chicken', 'Beer, Beer, Cake, Chocolate']
eachitems = ['Beer', 'Cake', 'Chocolate', 'Lemon with ci', 'Chicken']

for item in eachitems:
    assoc = [associated for associated in listitems if item in associated]
    result = set()
    for itemlist in assoc:
        itemlist = itemlist.replace(', ', ',').split(',')
        itemlist = set(itemlist)

        itemlist.remove(item)

        result = result | itemlist
    print('People who buy {} also buy: '.format(item), ', '.join(sorted(result)))
 

Вывод

 People who buy Beer also buy:  Cake, Chicken, Chocolate
People who buy Cake also buy:  Beer, Chocolate
People who buy Chocolate also buy:  Beer, Cake
People who buy Lemon with ci also buy:  Chicken
People who buy Chicken also buy:  Beer, Lemon with ci
 

Ключевой частью этого решения является использование наборов для удаления повторяющихся элементов и оператора | (union).

В качестве примечания, вместо того, чтобы использовать | так

 result = result | itemlist
 

вы можете изменить набор на месте с помощью

 result.update(itemlist)
 

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

1. @E M есть отзывы?