繁体   English   中英

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

[英]Extracting the number of different elements of a specific column in a 2D list

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

  1. 特定列中不同元素的数量
  2. 与该特定列不同的元素的名称
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

我只是想知道是否有更有效的方法

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

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'])

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

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

或更妙的是,在循环中立即执行您想对value做的任何事情,而不是附加到all unique建立一组唯一的值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM