Nano Hash - криптовалюты, майнинг, программирование

python: сравнение значений в списке, если они существуют в другом списке

Итак, теперь у меня есть 2 списка,

list1 = [[0,1],[0,2],[0,10]]
list2 = [[1, ['miniwok', 'food1']], [2,['chicken', 'food2']], [3,['duck', 'food3']], ..... , [10, ['pizza', 'food10']]]

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

[[1, 'miniwok'],[2, 'chicken'],[10,'pizza']]

Я пытался использовать вложенный цикл for, но думаю, что делаю что-то не так.

for x in range(len(list1)):
    for y in range(1, len(list2)+1):
        if(list1[x][1] == list2[y]):
            result = [y, list2[y][0]]
            fstore.append(result)
10.11.2019

  • Можно ли изменить код, генерирующий эти списки, для использования словарей, которые будут более производительными (доступ к случайному элементу с помощью O(1)), и более простыми в использовании? Это предполагает, что ваши ключи (вторые целые числа) уникальны. 10.11.2019

Ответы:


1

В вашем коде были некоторые проблемы с доступом к значениям через индексацию, и вы не назначили fstore пустым списком перед его использованием.

Исправленная версия вашего ответа здесь -

list1 = [[0,1],[0,2],[0,10]]
list2 = [[1, ['miniwok', 'food1']], [2,['chicken', 'food2']], [3,['duck', 'food3']], [10, ['pizza', 'food10']]]
fstore = []
for x in range(len(list1)):
    for y in range(len(list2)):
        if(list1[x][1] == list2[y][0]):
            result = [list2[y][0], list2[y][1][0] ]
            fstore.append(result)
            break

Содержимое фстора:

[[1, 'miniwok'], [2, 'chicken'], [10, 'pizza']]

Я надеюсь, что это может помочь вам. Если у вас есть сомнения, вы можете задать их в комментариях. :)

10.11.2019

2

Вы можете преобразовать list2 в словарь для более быстрого поиска:

list1 = [[0,1],[0,2],[0,10]]
list2 = [[1, ['miniwok', 'food1']], [2,['chicken', 'food2']], [3,['duck', 'food3']], [10, ['pizza', 'food10']]]
new_l2 = dict(list2)
result = [[b, k[a]] for a, b in list1 if (k := new_l2.get(b)) is not None]

Выход:

[[1, 'miniwok'], [2, 'chicken'], [10, 'pizza']]
10.11.2019
  • Стоит отметить, что оператор := является новым из python 3.8. 10.11.2019

  • 3

    Ты можешь сделать:

    list1 = [[0,1],[0,2],[0,10]]
    list2 = [[1, ['miniwok', 'food1']], [2,['chicken', 'food2']], [3,['duck', 'food3']],... , [10, ['pizza', 'food10']]]
    numbers = [number[1] for number in list1]
    [(item[0], item[1][0]) for item in list2 if item[0] in numbers]
    

    Выход:

    [(1, 'miniwok'), (2, 'chicken'), (10, 'pizza')]

    Конечно, «()» в понимании списка, которое создает список кортежей, можно переключить с помощью «[]», чтобы создать список списков, если вы предпочитаете.

    10.11.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..