Python 提取二维列表中特定列的不同元素数

Python 提取二维列表中特定列的不同元素数,python,list,Python,List,我有一个2D元素列表,需要提取: 特定列中不同元素的数目 来自该特定列的那些不同元素的名称 在这个列表中,我想检查第4列的例子list[3]。其思想是提取ARC和REP的条目数,以及ARC和REP的名称。 到目前为止,我已经做到了以下几点: 转换“矩阵”以获得所有元素 newlist = zip(*mylist)[3] 在newlist 我只是想知道是否有更有效的方法将这些元素添加到集合中: newlist = [u[3].strip() for u in list] s = set(new

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

  • 特定列中不同元素的数目
  • 来自该特定列的那些不同元素的名称
  • 在这个列表中,我想检查第4列的例子
    list[3]
    。其思想是提取
    ARC
    REP
    的条目数,以及
    ARC
    REP
    的名称。 到目前为止,我已经做到了以下几点:

  • 转换“矩阵”以获得所有元素

    newlist = zip(*mylist)[3]
    
  • 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
    <代码>唯一生成一组唯一值


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

    该列中有大量可变空白;您可能需要添加一个
    str.strip()
    调用。@MartijnPieters当然,这会有帮助!顺便说一下,不要将
    list
    用作变量名。您正在屏蔽内置类型。@MartijnPieters谢谢,我现在已经更新了代码
    unique = set()
    all = []
    for row in mylist:
        value = row[3].strip()
        unique.add(value)
        all.append(value)