我有以下数据集,它是一系列存储为嵌套列表的行:
[['John', '35', 'UK'],
['Emma', '43', 'UK'],
['Lucy', '25', 'AU']]
(行总长度相同)
我需要返回'UK', 'AU'
作为可迭代的(对排序无动于衷)。
是否有一个单行代码返回第三列中包含的唯一值,哪个更简单?
set(list(map(list, zip(*l)))[2])
答案 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]: