使用Python中每个列表中的最后一个元素

use*_*185 1 python

我在Python中有这个列表列表:

[[100,XHS,0],
[100,34B,3],
[100,42F,1],
[101,XHS,2],
[101,34B,5],
[101,42F,2],
[102,XHS,1],
[102,34B,2],
[102,42F,0],
[103,XHS,0],
[103,34B,4],
[103,42F,2]]
Run Code Online (Sandbox Code Playgroud)

我想找到最有效的方法(我正在处理大量数据)使用每个id(第一个元素)的每个列表中的最后一个元素创建一个新的列表列表.所以对于样本列表上面,我的结果是:

[[0,3,1],
[2,5,2],
[1,2,0],
[0,4,2]]
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Python中实现它?谢谢

Jon*_*nts 8

一个遍历构造块的itertools方法 - 获取最后的元素,分组成三个,将3个组转换为列表...

from operator import itemgetter
from itertools import imap, izip

last_element = imap(itemgetter(-1), a)
in_threes = izip(*[iter(last_element)] * 3)
res = map(list, in_threes)
# [[0, 3, 1], [2, 5, 2], [1, 2, 0], [0, 4, 2]]
Run Code Online (Sandbox Code Playgroud)

但是,看起来你想在第一个元素上"分组"(而不是纯粹的3个连续项块),所以你可以使用defaultdict它:

from collections import defaultdict
dd = defaultdict(list)
for el in a:
    dd[el[0]].append(el[-1])

# defaultdict(<type 'list'>, {100: [0, 3, 1], 101: [2, 5, 2], 102: [1, 2, 0], 103: [0, 4, 2]})
Run Code Online (Sandbox Code Playgroud)