2013-06-18 60 views
0

假設我有每個列表元素是由三個部分,如清單:檢查兩個列表元素蟒蛇值

[[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 0, 2], [0, 1, 1], [0, 2, 0], [1, 0, 1], [1, 1, 0], [2, 0, 0], [0, 0, 3], [0, 1, 2], [0, 2, 1], [0, 3, 0], [1, 0, 2], [1, 1, 1], [1, 2, 0], [2, 0, 1], [2, 1, 0], [3, 0, 0], [0, 0, 4], [0, 1, 3], [0, 2, 2], [0, 3, 1], [0, 4, 0], [1, 0, 3], [1, 1, 2], [1, 2, 1], [1, 3, 0], [2, 0, 2], [2, 1, 1], [2, 2, 0], [3, 0, 1], [3, 1, 0], [4, 0, 0]] 

會有檢查什麼是每個列表元素內即一種方式說我想要創建一個新的列表,基於上面包含所有包含兩個零的元素的索引位置,以及包含一個零的每個元素的列表,我該怎麼做?

我知道如何檢查一個單一的東西是否在列表元素,但不是如果該元素髮生兩次。

回答

3

您可以使用.count方法。

two_zeros = [x for x in lst if x.count(0) == 2] 
one_zero = [x for x in lst if x.count(0) == 1] 

如果你想成爲真正聰明的,你可以做整個事情與collections.defaultdict一個循環:

d = collections.defaultdict(list) 
for sublist in lst: 
    d[sublist.count(0)].append(sublist) 

現在你有了零的個數的映射到其子列表包含這個零的數目。

當然,如果你真的想要一個索引列表,你可以使用enumerate

+0

我喜歡那個循環,可以讓你知道它是怎麼回事...... – user124123

2

使用count()

help

count(...) 
    L.count(value) -> integer -- return number of occurrences of value 

示例代碼(部分清單) -

>>> startList = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 0, 2], [0, 1, 1], [0, 2, 0], [1, 0, 1], [1, 1, 0], [2, 0, 0], [0, 0, 3], [0, 1, 2], [0, 2, 1]] 
>>> for element in startList: 
     element.count(0) 
2 
2 
2 
2 
1 
2 
1 
1 
2 
2 
1 
1 

如何創建列表?使用列表理解上面的想法。

>>> twoZero = [index for index, elem in enumerate(startList) if elem.count(0) == 2] 
>>> twoZero 
[0, 1, 2, 3, 5, 8, 9] 
>>> oneZero = [index for index, elem in enumerate(startList) if elem.count(0) == 1] 
>>> oneZero 
[4, 6, 7, 10, 11] 

這是您的列表的一部分。

0

你可以使用一個list comprehensionlist.countenumerate

two_zeros_index = [i for i, item in enumerate(datalist) 
        if item.count(0) == 2] 

但既然你要創建兩個列表,一個普通的老for循環可能會更好(所以你只能通過datalist重複一次):

one_zero, two_zeros_index = [], [] 
for i, item in enumerate(datalist): 
    n = item.count(0) 
    if n == 1: 
     # Every *item* containing one zero 
     one_zero.append(item) 
    elif n == 2: 
     # Every *index* containing two zeros 
     two_zeros_index.append(i) 
0

名單reqd將有你需要的所有指標:

>>> reqd = [] 
>>> for i in range(len(d)): 

    if d[i].count(0) == 2: 
     reqd.append(i) 


>>> reqd 
[0, 1, 2, 3, 5, 8, 9, 12, 18, 19, 23, 33]