如何在List中计数。列表在Python中混合使用

时间:2018-02-28 10:24:48

标签: python list numpy

我的列表是L = [[1,1], [2,2], [1,1], 1]

我想在n中计算L中不同的元素。怎么样??? 计数后答案应为3。

3 个答案:

答案 0 :(得分:0)

这是一种方式。诀窍是将iterables转换为可散列类型(例如元组)。然后,您可以转换为set并计算len

当然,这不会做的是区分列表中的列表元素和元组元素。但这可能不适用于您的用例。

from collections import Iterable

L = [[1,1], [2,2], [1,1], 1]

len(set(tuple(i) if isinstance(i, Iterable) else i for i in L))

# 3

答案 1 :(得分:0)

如果项目在其班级中至少可排序,则可以使用以下方法查找unqiues。由于Python3主要不允许跨类型比较,我们先按类型排序,然后按值排序:

>>> from operator import itemgetter as item_, attrgetter as attr_
>>> from itertools import groupby
>>> 
>>> by_type = groupby(sorted(zip(map(attr_('__qualname__'), map(type, L)), L)), item_(0))
>>> by_type = {k: list(map(item_(0), groupby(map(item_(1), g)))) for k, g in by_type}
>>> by_type
{'int': [1], 'list': [[1, 1], [2, 2]]}
# total number of uniques
>>> sum(map(len, by_type.values()))
3

对于那些不喜欢map的人,这里是使用理解的翻译:

>>> by_type = groupby(sorted((type(i).__qualname__, i) for i in L), item_(0))
>>> by_type = {k: [gk for gk, gg in groupby(gval for gtp, gval in g)] for k, g in by_type}
>>> by_type
{'int': [1], 'list': [[1, 1], [2, 2]]}

答案 2 :(得分:0)

首先对列表

的每个元素进行字符串化

然后找到字符串化元素列表

然后得到集合的长度

print(len(set([str(i) for i in L])))

>>> 3

同样......你的OP请求“numpy”,这是不可能的,因为你不能在一个数组(列表和整数)中有多种数据类型。

ETA:

来自评论,很好的抓住了Paul Panzer;这应该修复问题,同时保持简洁的一个班轮:

L1 = [[0], np.array([0])]
print (len(set([(str(i)+str(type(i))) for i in L1])))
>>> 2

L2 = [[0, 1], np.array([0, 1])]
print (len(set([(str(i)+str(type(i))) for i in L2])))
>>> 2