使用Python

时间:2015-09-23 10:28:02

标签: python transpose

我有以下数据集,它是一系列存储为嵌套列表的行:

[['John', '35', 'UK'],
['Emma', '43', 'UK'],
['Lucy', '25', 'AU']]

(行总长度相同)

我需要返回'UK', 'AU'作为可迭代的(对排序无动于衷)。

是否有一个单行代码返回第三列中包含的唯一值,哪个更简单?

set(list(map(list, zip(*l)))[2])

(参考:Transpose list of lists

5 个答案:

答案 0 :(得分:5)

更改自己的代码:

Python 3.x:

set(list(zip(*l)[2]))

Python 2.x:

set(zip(*l)[2])

<强>演示:

l=[['John', '35', 'UK'],['Emma', '43', 'UK'],['Lucy', '25', 'AU']]
set(list(zip(*l)[2]))
{'AU', 'UK'}

答案 1 :(得分:4)

您可以使用list comprehension

>>> L = [['John', '35', 'UK'],
['Emma', '43', 'UK'],
['Lucy', '25', 'AU']]
>>> set([i[2] for i in L])
set(['AU', 'UK'])

答案 2 :(得分:3)

>>> l = [['John', '35', 'UK'],
         ['Emma', '43', 'UK'],
         ['Lucy', '25', 'AU']]
>>> set(element[-1] for element in l)
('AU', 'UK')

答案 3 :(得分:1)

你可以使用numpy:

import numpy as np

arr = np.array([['John', '35', 'UK'],
                ['Emma', '43', 'UK'],
               ['Lucy', '25', 'AU']])

unique = np.unique(arr[:,2])

答案 4 :(得分:1)

我认为bsuire的实际要求在实践中更复杂,因此我建议使用pandas来处理这些要求,它更强大,更灵活。

所以,在这种情况下如何使用pandas:

In [17]: import pandas as pd

In [18]: a = [['John', '35', 'UK'],
   ....: ['Emma', '43', 'UK'],
   ....: ['Lucy', '25', 'AU']]

In [19]: b = pd.DataFrame(a)

In [20]: b
Out[20]:
      0   1   2
0  John  35  UK
1  Emma  43  UK
2  Lucy  25  AU

In [21]: b[2].unique()
Out[21]: array(['UK', 'AU'], dtype=object)

In [22]: