Форум сайта python.su
0
Добрый день.
Есть вопрос, мне кажется, что он не особо сложный, но чёткого ответа я не нашёл, примеров миллион, да всё не то. Может я не правильно спрашиваю, потому пишу вам.
Есть у меня два списка, список 2 («list2»), может быть совсем пустым:
list1 = [‘one’, ‘two’, ‘three’, ‘six’] list2 = [‘one’, ‘two’, ‘four’]
Отредактировано FishHook (Янв. 9, 2020 16:04:32)
Офлайн
568
pstbinорганизовать это лучше работая не со списками, а с множествами
Подскажите пожалуйста, как это организовать.
Офлайн
0
FishHookДа я и не против, мне бы пример, как это правильно сделать.
организовать это лучше работая не со списками, а с множествами
list1 = ['1', '2', '4', '5'] list2 = ['1', '2', '3'] list1 = [i for i in list1 if not i in list2] print(list1)
Отредактировано pstbin (Янв. 9, 2020 16:27:56)
Офлайн
568
pstbinкакой пример вам нужен? Я дал вам всю необходимую информацию.
Да я и не против, мне бы пример, как это правильно сделать.
Офлайн
0
FishHookСпасибо.
какой пример вам нужен? Я дал вам всю необходимую информацию.
Открыть гугл, вбить в поик “множества в питоне” - это для вас чересчур сложно?
Учебник читать вы тоже не пробовали?
Офлайн
857
pstbinЗадача выглядит странно.
Может я не правильно спрашиваю, потому пишу вам.
pstbinА зачем тебе это нужно?
то я хочу этот элемент поместить в переменную «А», а если же нет такого элемента, то поместить искомый элемент в переменную «А1»
>>> lst1 = [1, 2, 3, 4, 5] >>> lst2 = [2, 4] >>> >>> out = [(i, i in lst2) for i in lst1] >>> out [(1, False), (2, True), (3, False), (4, True), (5, False)] >>>
Офлайн
0
py.user.nextДа, наверное, но я попытаюсь её объяснить более подробно.
Задача выглядит странно.
py.user.nextЭто нужно для мониторинга.
А зачем тебе это нужно?
import subprocess #list1 = ['компонент1', 'компонент2', 'компонент3', 'компонент4', 'компонент5'] list2 = subprocess.getoutput("echo dump | nc localhost 2320 | tr -s '/' | cut -f 4 -d '/' | tr -s '#' | cut -f 2 -d '#' | sort | uniq -d'") for i in list2: if 'компонент1' in list2: comp1 = 'компонент1' else: comp1 = 'not in list' if 'компонент2' in list2: comp2 = 'компонент2' else: comp2 = 'not in list' if 'компонент3' in list2: comp3 = 'компонент3' else: comp3 = 'not in list' if 'компонент4' in list2: comp4 = 'компонент4' else: comp4 = 'not in list' if 'компонент5' in list2: comp5 = 'компонент5' else: comp5 = 'not in list' print(f"comp1: {comp1}\ncomp2: {comp2}\ncomp3: {comp3}\ncomp4: {comp4}\ncomp5: {comp5}\n")
Отредактировано pstbin (Янв. 10, 2020 10:20:02)
Офлайн
27
Не заморачивайтесь со списками, используйте множества: вместо идеального списка - множество с идеальными значениями. Полученный второй список преобразовать в множество и получить разность множеств. Из полученного множества можно извлечь элементы в цикле и присваивать/передавать их в том же цикле кому и чему угодно.
Почитайте операции над множествами
Обратите внимание на влияние порядка расположения операндов на результат!
Отредактировано Rafik (Янв. 10, 2020 11:49:21)
Офлайн
0
RafikСпасибо, попробую…
Не заморачивайтесь со списками, используйте множества
Офлайн
857
pstbinДа.
но этот вариант очень плохой
pstbinЭто правда. Но тут надо использовать не просто такие мелочи, а применить структурное программирование. А для этого надо использовать функции.
Да, забыл добавить, вы можете подумать, что раз меня устраивает этот вариант, то можно так и оставить и не морочить никому голову, но нет, мне бы хотелось, всё таки, сделать именно автоматическое сравнение двух списков, с последующей передачей состояния каждого компонента, потому как у меня есть и другие команды, которые получают другие списки и с ними нужно делать то же самое. Для каждого писать такой же “ручной” код, как выше - это очень неправильно и затратно по времени.
>>> def f(a, b): ... return a + b ... >>> def g(a, b): ... return (f(a, b) + f(a, b)) * f(a, b) ... >>> def h(value): ... return 'The value is equal to {}!'.format(value) ... >>> print(h(g(3, 5) + g(3, 5))) The value is equal to 256! >>>
Отредактировано py.user.next (Янв. 10, 2020 13:41:25)
Офлайн