Kurzschreibweise für List in List noch nicht verstanden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

Hallihallo
ich würde gern den code (oben) in kurzschreibweise (oder wie man das nennt) erhalten.

Code: Alles auswählen

user_info = [['Mustertestdatei_co_17.02.2020.xlsx', 'Tabelle1', 3, 7, 5],
             ['Mustertestdatei_co_17.02.2020.xlsx', 'Laie', 7, 3, 5],
             ['Mustertestdatei_co_17.02.2020.xlsx', 'Profi', 9, 4, 5]
             ]

search_lst = [['Mustertestdatei_co_17.02.2020.xlsx', 'Tabelle1'], ['Mustertestdatei_co_17.02.2020.xlsx', 'Profi']]

for user in user_info:
    for searcher in search_lst:
        if searcher[0] in user and searcher[1] in user:
            print(user)
print('---')
print(user for user in user_info if search[0] for searcher in search_lst and search[1] for search in search_lst)
leider versteh ich das problem nicht ganz.
ich benutze pycharm. darin leuchtet search[0] auf mit dem hinweis:
Name 'search' can be not defined
das würde ich gern verstehen :)
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Du kannst die for-Schleifen nicht in Kurzschreibweise (Nomen schreibt man gross) also als Listcomprehension schreiben, weil Du gar keine Liste erzeugst.
Würdest Du eine Liste users erzeugen, mußt Du die for-Schleifen und if-Abfrage in der selben Reihenfolge schreiben, wie oben:

Code: Alles auswählen

users = [user for user in user_info for searcher in search_lst if searcher[0] in user and searcher[1] in user]
Die if-Abfrage ist übrigens falsch, genauso falsch, wie die Listen innerhalb der Listen, die sollten Tuple sein.

Code: Alles auswählen

user_infos = [
    ('Mustertestdatei_co_17.02.2020.xlsx', 'Tabelle1', 3, 7, 5),
    ('Mustertestdatei_co_17.02.2020.xlsx', 'Laie', 7, 3, 5),
    ('Mustertestdatei_co_17.02.2020.xlsx', 'Profi', 9, 4, 5),
]

search_patterns = [
    ('Mustertestdatei_co_17.02.2020.xlsx', 'Tabelle1'),
    ('Mustertestdatei_co_17.02.2020.xlsx', 'Profi'),
]

for user_info in user_infos:
    for filename, sheetname in search_patterns:
        if filename == user_info[0] and sheetname == user_info[1]:
            print(user)
Dieses Umwandeln in Listcomprehension-Schreibweise sei dem Leser überlassen.
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

Danke.
Antworten