2017-07-29 4 views
0

Ich habe eine Liste, die möglicherweise eine Liste enthält (und diese kann anschließend auch aus Listen bestehen, ad infinitum). Gibt es eine Möglichkeit zu testen, ob irgendein Element am 'Ende' dieser Listen eine Ganzzahl hat? Die Liste wird immer Nummern (Floats oder Ints) haben.Jedes Element in der Liste ist eine ganze Zahl

Wie ich weiß nicht, die Anzahl der verschachtelten Listen es vorher, die einzige Art, wie ich dies zu tun denken kann, so etwas wie wäre,

x = [[[[5]]]] 
if (len(str(x)) != len(str(x).replace('.','')) or ('int' not in str(x)): 
    int_in_list = False 

Gibt es eine logische Art und Weise, dies zu tun?

Antwort

3

Ich würde empfehlen, etwas wie collapse() from the more-itertools library zu verwenden, das rekursiv in Listen und andere iterierbare Typen absteigt und die grundlegenden nicht iterierbaren Elemente liefert. Sie können dann einfach überprüfen, ob eines der Elemente, die durch collapse() ergeben, eine ganze Zahl ist.

any(isinstance(x, int) for x in collapse(...)) 
2

Hier ya go:

numlist = [[[[[1]]]]] 

def recursive_flatten(lst): 
    for item in lst: 
     if isinstance(item, list): 
      yield from recursive_flatten(item) 
     yield item 

if any(isinstance(item, int) for item in recursive_flatten(numlist)): 
    # Horray 
    pass 
Verwandte Themen