Как проверить лист на наличие обьекта с конкретными характеристиками\параметрами? Python

399 просмотра
0
0 Комментариев

Каждое значение в листе 1 и 2 имеют характеристики которые могут принимать различные числовые значения. Я хочу проверить есть ли в листе1 обьект из листа2 с конкретными характеристиками

l1= [[a,b,c,x,y,z],[a,b,c,x,y,z],[a,b,c,x,y,z],...]
l2= [z,b,c]
 
while True:
    if ...
        break

В if условии мне надо проверить имеется ли в первом листе обьект из второго листа с конкретными значемиями параметров z и b, значение c не играет роли при поиске. Как это может быть сделано ?

Обновление

l1 представляет собой лист состоящий из карточек и каждая переменная является кокнретной характеристикой присущей карте, например начало пути(z), конец пути(b), колво карт этого(c) типа и т.д.

l2 это лист который обновляется и каждый раз этому листу присваивается одна карта только с 3 из 6 характеристик: начало, конец и колво.

Основываясь на первых двух переменным на начале(z) и конце(b) нужно проверить имеется ли карта с такими же параметрами в стопке карточек. Кол-во не играет роли.

Обновление 2

Допустим

l2 = [1,4,20]

Как прогнать весь l1 и проверить, если ли карта с такими же значениями z=1 и b=4 как у карты из l2?


Добавить комментарий

5 Answers

Python Опубликовано 09.12.2018
0

Трудно уловить истинный смысл в вопросе. Все спутанно.
На всякий случай делаю два варианта как я понял.

  • res1 — если нужно найти одинаковые z, b, c
  • res2 — если нужно найти одинаковые z, b

Код:

l1= [[1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18]]
l2= [18,14,15]
res1 = [ x for x in l1 if l2 == x[5:6]+x[1:3] ]
res2 = [ x for x in l1 if l2 == x[5:6]+x[1:2] ]

Добавить комментарий
0

Допустим l2 = [1,4,20]
Как прогнать весь l1 и проверить, если ли карта с такими же значениями z=1 и b=4 как у карты из l2?

Для читаемости превратим значения в l1, l2 в collections.namedtuple:

#!/usr/bin/env python
from collections import namedtuple
 
Map = namedtuple('Map', 'a,b,c,x,y,z')
l1 = [[a,b,c,x,y,z],[a,b,c,x,y,z],[a,b,c,x,y,z],...]
l2 = [1, 4, 20]
 
z, b = l2[:2] # reference
found_maps = [m for m in map(Map, l1) if z == m.z and b == m.b]

Если достаточно найти только одну подходящую карту:

found = next((m for m in map(Map, l1) if z == m.z and b == m.b), None)

Перебор заканчивается на первой найдённом элементе, не перебирая всего l1 списка.

В обоих случаях if found можно использовать, чтобы проверить найден ли хотя бы один элемент.

Добавить комментарий
0

Попробуйте использовать SET

set1 = set(l1)
set2 = set(l2)
 
set1.interconnection(set2)
set2 & set2

Добавить комментарий
0

Мне кажется, задача достаточно тривиальна, просто автор нагородил слишком много путанного описания. По сути, нам надо пройти по спискам из списка, и найти тот, в котором присутствцют нужные значения. Решается достаточно просто циклом и условием:

l1 = [[1,4,2,7,3,5],[1,8,9,2,5,3,7],[3,2,1,5]]
res = None
for item in l1:
    if 4 in item and 7 in item:
        res = item

Результатом будет res = [1,4,2,7,3,5]

В определениях автора цикл будет иметь примерно следующий вид (для наглядности отдельные логические выражения взял в скобки):

for item in l1:
    if (l2[0] in item) and (l2[1] in item):
        res = item

Если надо найти все вхождения в список, то нужно объявить переменную res как список и операцию присовения заменить на добавление элемента:

res = []
for item in l1:
    if (l2[0] in item) and (l2[1] in item):
        res.append(item)

Добавить комментарий
0
  1. Чтобы перебрать список l1, используйте конструкцию for … in …

Например так:

for item in l1:
    здесь выполняем проверку на совпадение

  1. Чтобы из списка каждой карточки взять только нужные параметры, используйте индексы, вот так:

    l2[0]

Такая конструкция извлечёт из списка l2 только нулевой параметр (в программировании отсчёт идёт не с первого элемента, а с нулевого и только потом идёт первый, второй и т.д.)

  1. Чтобы сравнить два параметра используйте оператор ветвления if и оператор сравнения ==

Как ими пользоваться, вы легко найдёте в гугле.

А вообще, я бы посоветовал вам прочитать хотя бы самые основы, прежде чем пытаться решать конкретные задачи.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up