提取2D列表中特定列的不同元素的数量

时间:2014-08-28 10:42:13

标签: python list

我有一个2D元素列表,我需要提取:

  1. 特定列的不同元素的数量
  2. 该特定列的那些不同元素的名称
  3. mylist=[[1.0, u'1', u'COMPLETED', u' ARC',  30.0, 1.0, u'06/02/2014 09:20:18',u'2 CCW'],
          [1.0, u'1', u'COMPLETED', u' ARC ', 30.0, 1.0, u'04/02/2014 09:15:56',u'1 CW'],
          [1.0, u'1', u'COMPLETED', u' ARC ', 30.0, 1.0, u'07/02/2014 12:15:56',u'1 CW'],
          [1.0, u'1', u'COMPLETED', u' REP',  30.0, 1.0, u'06/02/2014 09:20:18',u'2 CCW'],
          [1.0, u'1', u'COMPLETED', u' REP',  30.0, 1.0, u'12/02/2014 09:20:18',u'1 CW'], 
          [1.0, u'1', u'COMPLETED', u' REP',  30.0, 1.0, u'12/02/2014 09:20:18',u'1 CW']]
    

    在此列表中,我想检查列号4 list[3]的实例。这个想法是提取ARCREP以及名称ARCREP的条目数。 到目前为止,我设法做的是以下内容:

    1. 转置“矩阵”以获得所有元素

      newlist = zip(*mylist)[3]
      
    2. 循环遍历newlist
    3. 中的不同元素

      我只是想知道是否有更有效的方法来做到这一点

2 个答案:

答案 0 :(得分:1)

将这些元素添加到集合中:

newlist = [u[3].strip() for u in list]
s = set(newlist)

然后len(s)将是唯一元素的数量,元素本身就是该集合的成员。

也允许一次性完成:

>>> s = set([u[3].strip() for u in list])
>>> s
set([u'REP', u'ARC'])

答案 1 :(得分:1)

如果你需要循环遍历值 ,你也可以跳过zip()并在一个简单的循环中进行处理:

unique = set()
all = []
for row in mylist:
    value = row[3].strip()
    unique.add(value)
    all.append(value)

或者更好的是,在循环中对value执行任何操作,而不是附加到allunique构建了一组唯一值。

通过使用显式循环,我还潜入str.strip()调用以规范化列;那里的空白量有很多变化。您可能想要首先调整列表的构建方式。