2015-12-06 13 views
11

Ich möchte überprüfen, ob eine Liste eine bestimmte Sequenz von Elementen hat. Ich habe die Liste sortiert, die 7 Elemente enthält, ich möchte jetzt überprüfen, ob die ersten 4 gleich sind und die letzten 3 sind die gleichen.Überprüfen einer Liste für eine Sequenz

Für das, was ich um wahr zu sein erreichen will, dass die Liste so sein würde:

list = ['1','1','1','1','2','2','2'] 

Ich hoffe, das macht, was ich klarer erreichen will.

+0

'if len (Satz (lst [3])) == 1 und len (Satz (lst [3:])) == 1:' –

+0

Mögliches Duplikat http: // Stackoverflow .com/questions/3787908/Python-Ermitteln-wenn-alle-Elemente-einer-Liste-sind-der-gleiche-Artikel – SIslam

+0

Mögliche Duplikate von [H Oder teilen Sie eine Liste in Python in gleich große Stücke?] (http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python) –

Antwort

8

Sie können eine Liste in Scheiben schneiden. Nehmen Sie die ersten vier Elemente:

>>> L = ['1','1','1','1','2','2','2'] 
>>> L[:4] 
['1', '1', '1', '1'] 

und die letzten drei:

>>> L[-3:] 
['2', '2', '2'] 

A set keine Duplikate erlauben. Daher:

>>> set(L[:4]) 
{1} 

Das bedeutet, wenn die Länge dieses Satzes 1 ist, sind alle Elemente in der geschnittenen Liste identisch.

Putting dies alles zusammen:

>>> len(set(L[:4])) == 1 and len(set(L[-3:])) == 1 
True 

zeigt Ihnen, dass Ihre Bedingung erfüllt ist.

+0

Yap genau was @Hugh Bothwell in der Frage kommentiert. – SIslam

1

auf die Frage nach den zusätzlichen Details Basierend, das Problem lösen:

def check_group_equal(inputList): 
    ref = inputList[0] 
    for e in inputList[1:]: 
     if e != ref: 
      return False 
    return True 

list = some_random_list(length=7) 

# Check first group 
check_group_equal(list[0:3]) 

# Check second group 
check_group_equal(list[4:7]) 
+1

Der letzte Wert hilft sehr, also vielen Dank! Ich glaube jedoch nicht, dass der Ausdruck das erreichen wird, was ich will. Ich habe den Beitrag bearbeitet, um zu erklären, was ich besser überprüfen möchte. – Frazer224

+0

dies wird nie wahr sein, eine 3-length-Liste unterscheidet sich immer von einer 2-length-Liste – Netwave

+0

Lieber downvoter, bitte beachten Sie, dass meine erste Antwort-Version auf die erste Frage Version gerichtet war. Nachdem ich zusätzliche Informationen in der Bearbeitung gesehen habe, habe ich meine Antwort entsprechend angepasst **. Bitte überdenken Sie, was Sie getan haben – SebasSBM

1

Wenn Sie Ihre Liste in String umwandeln kann, re tun:

re.match(r'^(.)\1{3}(.)\2{2}$', ''.join(['1','1','1','1','2','2','2'])) 
2

Wenn Sie überprüfen wollen, ob die Liste 3 Artikel eines Elements enthält, und 4 Elemente eines anderen, können Sie das Sortieren auslassen, indem Sie collections.Counter:

content = Counter(['1', '2', '2', '1', '1', '2', '1']).most_common() 
print(content) # => [('1', 4), ('2', 3)] 

if len(content) == 2 and content[0][1] == 4 and content[1][1] == 3 or 
    len(content) == 1 and content[0][1] == 7: 
    pass # Your list have desired structure 
Verwandte Themen