PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : python3 suchen in Listen



Huhn Hur Tu
20.03.17, 08:03
Hi,

ich habe zwei Listen die ein Datenbankexport sind



[(1, 0, 'elasticsearch', 'clientfuu-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-live-]YYYY.MM.DD', False, '', '', True, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'clientmonitoring-qa', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-qa-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'clientmonitoring-dev', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-dev-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'clientmonitoring-ALL', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-*-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-dev', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-dev-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-qa', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-qa-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-live-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-ALL', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-*-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'orderentry-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-monitoring-orderentrybossbapb-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'process-instant-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-process-instant-monitoring*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'carlos-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-monitoring-ormaelbossc-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'logstash-termination-clearance-events-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-termination-clearance-events-live-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', '*-events', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-*-events-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'sisi-monitoring', 'proxy', 'http://elstic.loc:9200/', '', '', '[logstash-sisi-monitoring-live-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}')]
[(1, 0, 'elasticsearch', 'clientfuu-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-live-]YYYY.MM.DD', False, '', '', True, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'clientmonitoring-qa', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-qa-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'clientmonitoring-dev', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-dev-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'clientmonitoring-ALL', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-*-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-dev', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-dev-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-qa', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-qa-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-live-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-ALL', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-*-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'orderentry-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-monitoring-orderentrybossbapb-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'process-instant-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-process-instant-monitoring*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'carlos-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-monitoring-ormaelbossc-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'logstash-termination-clearance-events-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-termination-clearance-events-live-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', '*-events', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-*-events-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}')]


bei der ich pro line



(1, 0, 'elasticsearch', 'clientfuu-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-live-]YYYY.MM.DD', False, '', '', True, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'),


Pruefen will ob das dritte Element auch in der zweiten Liste im dritten Element vorkommt und wenn ja will ich ueber alle Elemente einen Vergleich machen

Ich bin aber scheinbar zu bloed das bei Google zu finden

Gruss Stefan

snowcrash23
20.03.17, 13:12
Moin,

ich glaube du suchst zip (https://docs.python.org/3.3/library/functions.html#zip):


for v1, v2 in zip(list_1, list_2):
if v1[2] == v2[2]:
vergleich(v1, v2)


Für sehr große listen gitb es auch noch itertools.zip_longest (https://docs.python.org/3.3/library/itertools.html#itertools.zip_longest).

MfG
snowcrash23

nopes
20.03.17, 17:27
bei den zip Ansatz halt auch mal dran denken, wie sich das verhält, wenn die Listen nicht gleich lang sind, was vermutlich ohnehin nicht der Fall ist, aber mal probieren was passiert sollte man schon ;)

Huhn Hur Tu
22.03.17, 14:01
Cool, das ist der erste Schritt, aber ich vertshe ich noch nicht wie ich das anders rum mache, also wenn v1 nicht in Liste 2 drin ist

Also irgendwas wie


for v1, v2 not in zip(live_data, qa_data):

nopes
23.03.17, 01:26
Ich würde grob sagen zwei Fälle und zwei Bedingungen:
Bedingungen sind:
1. es sind zwei Listen
2. beide Listen haben gleich viele Einträge

Fälle:
1. du willst nur die beiden Einträge "vergleichen", da ist zip dein Kumpel
2. du willst den Eintrag aus der ersten Liste, gegen alle Einträge der zweiten Liste "vergleichen", da ist zip nicht dein Kumpel

-- Ich sags noch mal, bedenke auch, was passieren soll, wenn die Listen nicht gleich viele Einträge haben (auch da ist zip nicht dein Kumpel)...

Huhn Hur Tu
23.03.17, 09:15
Meinme Bedigungen sind

- zwei Listen
- Beide Listen koennen koennen unterschiedlich viele Eintraege haben

nopes
23.03.17, 11:05
Nun generel stellt Python dafür die enumerate (https://docs.python.org/3/library/functions.html#enumerate) Funktion zur Verfügung.
Alternativ die itertools (https://docs.python.org/3/library/itertools.html), izip und count, arbeiten praktisch genauso, wie enumerate, sind dabei aber angeblich schneller - habe ich nicht nach gemessen.
Du könntest bzw. ich würde eine dritte Liste ins Spiel bringen, die hält dann noch den Wert, denn du zum Einstieg vergleichst - dürfte der Geschwindigkeit gut tun, nur deswegen, Code wäre dann etwa so


from itertools import izip as zip, count
# ...
for valueToFind in list:
indicesToCheck = [i for i, v in enumerate(simpelHelperList) if v == valueToFind['someKey']]
# oder halt count + izip
indicesToCheck = [i for i, v in zip(count(), simpelHelperList) if v == valueToFind['someKey']]
for indexToCheck in indicesToCheck:
foo = SomeComplexCheckFunction(valueToFind , complexList[indexToCheck])
# ...


Hoffe das hilft ein bisschen.

[edit]hatte ein Bug drin, beide Suchen geben eine Liste von Indizies zurück, die dann abgearbeitet werden muss.
Du kannst auch auf die einfache Liste verzichten


from itertools import izip as zip, count
# ...
for valueToFind in list:
indicesToCheck = [i for i, v in zip(count(), otherList) if v['someKey']['someOtherKey'] == valueToFind['someKey']['foo']]
for indexToCheck in indicesToCheck:
foo = SomeComplexCheckFunction(valueToFind , otherList[indexToCheck])
# ...