0

例子:

help([[1, 2, 2], [1, 1, 2]])

应该返回 2。

def help(num):
    lst = ()
    for n in num:  
        return(len(lst))

所以我需要表中所有数字的总和。

另一个例子:

help([[32, 12, 52, 63], [32, 64, 67, 52], [64, 64, 17, 34], [34, 17, 76, 32]]) 

返回:9

4

5 回答 5

2

试试这个(itertools.chain用于“连接”可迭代对象):

table = [ [32, 12, 52, 63], 
          [32, 64, 67, 52], 
          [64, 64, 17, 34], 
          [34, 17, 76, 32] ]

from itertools import chain
n_unique_values = len(set( chain(*table) ))

print n_unique_values # prints 9
于 2012-05-24T21:58:02.060 回答
2
def allElementsInTable(table):
    for row in table:
        for elem in row:
            yield elem

演示:

>>> set(allElementsInTable([[1,2,2],[1,1,2]]))
{1,2}

>>> len(set(allElementsInTable([[1,2,2],[1,1,2]])))
2

如果您进行大量表操作,您可能希望查看numpy数组。

于 2012-05-24T21:41:38.250 回答
1
>>> x = [[1, 2, 2], [1, 1, 2]]
>>> unique_items = lambda n: len(set(n))
>>> map(unique_items, x)
[2, 2]
于 2012-05-24T21:43:04.667 回答
1

@garnertb 当然是正确的,但是为了 Python 的乐趣:

>>> x = [[1, 2, 2], [1, 1, 2]]
>>> map(len, map(set, x))
[2, 2]

编辑:此页面上的此解决方案和其他解决方案的一个问题是,如果 x 变长,它的扩展性会很差。我很想:

>>> import itertools
>>> itertools.imap(len, itertools.imap(set, x))
<itertools.imap object at 0xb7437b8c>
于 2012-05-24T21:46:11.040 回答
0
compound_list = []
for sublist in lists:
    compound_list += sublist
len(set(compound_list))
于 2012-05-24T21:57:52.033 回答