Пытаясь найти разницу между двумя списками и добавив разницу в третий список, мой третий список приводит к вложенной форме в Python

#python #python-3.x #list #nested-lists #difference

#python #python-3.x #Список #вложенные списки #разница

Вопрос:

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

 def non_match_elements(first_list, second_list):
        third_list = []
        for item in first_list:
            if item not in second_list:
                third_list.append(item)
def main():
    first_list = [1,2,3,4,5,6,10,15,22]
    second_list = [2,3,4,14,18]
    third_list = (non_match_elements(first_list, second_list))
    print(third_list))


if __name__ == "__main__":
    main()
  

Этот код работает нормально, но когда появляются мои исходные списки, он выдает третий список как вложенный список. Как я могу понять, что не так? Мои исходные списки содержат много элементов в строковой форме, и оба являются не вложенными списками. И данные этих списков поступают из разных функций

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

1. Не видя ваших «оригинальных списков», мы никак не сможем вам помочь

2. [«Что-то.1.0.00643-НОВОЕ», «Что-то.1.0.00654-НОВОЕ», «Что-то.1.0.00671-НОВОЕ», «Что-то.1.0.00687-НОВОЕ», «Что-то.1.0.00718-НОВОЕ», «Что-то.1.0.00737-НОВОЕ», «Что-то.1.0.00747-НОВОЕ», «Что-то.1.0.00758-НОВОЕ», «Что-то.1.0.00774-НОВОЕ», «Что-то.1.0.00777-НОВОЕ», «Что-то.1.0.00799-НОВОЕ», «Что-то.1.0.00814-НОВОЕ», «Что-то.1.0.00821-НОВОЕ», «Что-то.1.0.00843-НОВОЕ», «Что-то.1.0.00855-НОВОЕ», «Что-то.1.0.00867-НОВОЕ», «Что-то.1.0.00886-НОВОЕ», «Что-то.1.0.00900-НОВОЕ», «Что-то.1.0.00920-НОВОЕ», «Что-то.1.0.00925-НОВОЕ», «Что-то.1.0.00942-НОВОЕ», «Что-то.1.0.00955-НОВОЕ»]

3. это выглядит так и для другого списка @inspectorG4dget

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

5. @S3DEV Я понял, что мой первый список был во вложенной форме, и я печатал его задолго до того, как он был вложен. и да .extend() тоже помог бы, спасибо

Ответ №1:

В примере у вас много опечаток:

  • third_list = (non_match_elements(first_list, second_list)) — ненужная скобка

  • print(third_list)) — дополнительно )

  • не вернул функцию third_list from

Любопытно, как получилось, что это сработало для вас?

После изменений — работает нормально для меня:

 def non_match_elements(first_list, second_list):
    third_list = []
    for item in first_list:
        if item not in second_list:
            third_list.append(item)
    return third_list
            

first_list = ["Something.1.0.00643-NEW", "Something.1.0.00654-NEW", "Something.1.0.00671-NEW", "Something.1.0.00687-NEW", "Something.1.0.00718-NEW", "Something.1.0.00737-NEW", "Something.1.0.00747-NEW", "Something.1.0.00758-NEW", "Something.1.0.00774-NEW", "Something.1.0.00777-NEW", "Something.1.0.00799-NEW", "Something.1.0.00814-NEW", "Something.1.0.00821-NEW", "Something.1.0.00843-NEW", "Something.1.0.00855-NEW", "Something.1.0.00867-NEW", "Something.1.0.00886-NEW", "Something.1.0.00900-NEW", "Something.1.0.00920-NEW", "Something.1.0.00925-NEW", "Something.1.0.00942-NEW"]
second_list = []
third_list = non_match_elements(first_list, second_list)
print(third_list)
print(first_list==third_list)
  

вывод:

 ['Something.1.0.00643-NEW', 'Something.1.0.00654-NEW', 'Something.1.0.00671-NEW', 'Something.1.0.00687-NEW', 'Something.1.0.00718-NEW', 'Something.1.0.00737-NEW', 'Something.1.0.00747-NEW', 'Something.1.0.00758-NEW', 'Something.1.0.00774-NEW', 'Something.1.0.00777-NEW', 'Something.1.0.00799-NEW', 'Something.1.0.00814-NEW', 'Something.1.0.00821-NEW', 'Something.1.0.00843-NEW', 'Something.1.0.00855-NEW', 'Something.1.0.00867-NEW', 'Something.1.0.00886-NEW', 'Something.1.0.00900-NEW', 'Something.1.0.00920-NEW', 'Something.1.0.00925-NEW', 'Something.1.0.00942-NEW']
True
  

поскольку все элементы в first_list отсутствуют во second_list — все они распечатаны, я также распечатал проверку, если first_list == third_list . не вижу никаких проблем.

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

1. пожалуйста, игнорируйте опечатки, это была моя ошибка. когда я перепечатал здесь, это было пропущено. этот работает нормально, но, как я уже упоминал, он не работает с моими исходными списками, которые извлекаются из других функций. Мой main выглядит так: def main(): first_list = [] second_list = [] first_list.append(вызов моей функции здесь) second_list.append(вызов моей второй функции здесь) third_list = (non_match_elements(first_list, second_list)) if name == » main «: main()

2. можете ли вы предоставить оба списка в своем вопросе, пожалуйста? Я постараюсь проверить ваши конкретные списки

3. first_list = [«Что-то.1.0.00643-НОВОЕ», «Что-то.1.0.00654-НОВОЕ», «Что-то.1.0.00671-НОВОЕ», «Что-то.1.0.00687-НОВОЕ», «Что-то.1.0.00718-НОВОЕ», «Что-то.1.0.00737-НОВОЕ», «Что-то.1.0.00747-НОВОЕ», «Что-то.1.0.00758-НОВОЕ», «Что-то.1.0.00774-НОВОЕ», «Что-то.1.0.00777-НОВОЕ», «Что-то.1.0.00799-НОВОЕ», «Что-то.1.0.00814-НОВОЕ», «Что-то.1.0.00821-НОВОЕ», «Что-то.1.0.00843-НОВОЕ», «Что-то.1.0.00855-НОВОЕ», «Что-то.1.0.00867-НОВОЕ», «Что-то.1.0.00886-НОВОЕ», «Что-то.1.0.00900-НОВОЕ», «Что-то.1.0.00920-НОВОЕ», «Что-то.1.0.00925-NEW», «Something.1.0.00942-NEW»] amp; second_list =[ ]

4. Я взял второй список пустым на некоторое время, чтобы сэкономить время на тестировании

5. Я взял второй список пустым на некоторое время, чтобы сэкономить время на тестировании