我有一个2D元素列表,我需要提取:
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]
的实例。这个想法是提取ARC
和REP
以及名称ARC
和REP
的条目数。
到目前为止,我设法做的是以下内容:
转置“矩阵”以获得所有元素
newlist = zip(*mylist)[3]
newlist
我只是想知道是否有更有效的方法来做到这一点
答案 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
执行任何操作,而不是附加到all
。 unique
构建了一组唯一值。
通过使用显式循环,我还潜入str.strip()
调用以规范化列;那里的空白量有很多变化。您可能想要首先调整列表的构建方式。