2015-12-06 14 views
11

için Listesini denetleniyor. Ben 7 eleman içeren listeyi sıraladım, şimdi ilk 4'ün birbiriyle aynı olduğunu kontrol etmek istiyorum ve son 3 birbiriyle aynı. Listenin böyle olacağını True elde etmek istediğimiz şey içinBir liste elemanlarının belirli bir diziyi olup olmadığını kontrol etmek isteyen ediyorum bir Sıra

:

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

bu ben daha net elde etmek istediğinizi yapar umuyoruz. soru üzerine ekstra detaylar dayanarak

+0

'halinde len (seti (linçi [: 3])) == 1 ve len (seti (lst [3:])) == 1: http ' –

+0

Tekrarlama: // stackoverflow .com/sorular/3787908/python-belirlemek-if-all-kalemlerin-of-a-listesinde-vardır-aynı maddelik bir – SIslam

+0

Olası kopyalar [H ow Eğer Python eşit büyüklükte parçalar halinde bir liste bölmek mi?] (http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python –

cevap

8

bir liste dilim. İlk dört elemanları atın:

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

ve son üç:

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

A set çiftleri izin vermez. Bu nedenle:

bu setin o uzunluğu 1 ise gelir
>>> set(L[:4]) 
{1} 

, dilimlenmiş listedeki tüm unsurlar aynıdır.

hep birlikte bu koyarak:

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

durumunuz karşılanmasını gösterir. Dizi içerisine listenizi dönüşümü Eğer

+0

Yap @ Both Bothwell soruyu yorumladı. – SIslam

1

, bu sorunu çözebilir: Bu çalışması gerekir

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

Son değer çok yardımcı oluyor, çok teşekkürler! Ancak, ifadenin istediğimi gerçekleştireceğini sanmıyorum. Daha iyi kontrol etmek istediğimi açıklamaya çalışmak için yayını düzenledim. – Frazer224

+0

bu doğru olmayacak, 3 boy listesi her zaman bir 2 boy listesinde – Netwave

+0

Değerli downvoter diferent edilir, benim ilk cevabım sürümü ilk Sorunun sürümüne yönlendirilir olduğunu fark edebilirsiniz. Düzenlemede ek bilgi gördükten sonra, ** cevabımı buna göre uyarladım **. Lütfen ne yaptığınızı tekrar gözden geçirin. – SebasSBM

1

, re yapacağız:

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

liste bir elemanın 3 öğeleri ve başka 4 öğeleri içerir olmadığını kontrol etmek istiyorsanız, kullanarak sıralama atlayabilirsiniz 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 
İlgili konular