如何在不使用循环-python的情况下获取每个子集的第二个元素

时间:2016-11-18 08:35:39

标签: python

我有一个输入:

temp = [[1,2], [3,4], [5,6]]

我希望输出为:

[2,4,6]

如何在 python 中使用循环

有没有像temp [:] [1]这样的东西? (即所有子集都采用第二个元素)

请注意:这是一个示例数据。我需要为更大的数据集执行此操作。因此,具有良好性能的实现将会有所帮助。

6 个答案:

答案 0 :(得分:2)

只需将列表压缩在一起。

temp = [[1,2], [3,4], [5,6]]
a = list(zip(*temp))[1]
print(a)

<强>输出

(2, 4, 6)

如果输出必须是列表:

print(list(a))

<强>输出

[2, 4, 6]

上面的代码适用于Python 3,其中zip返回迭代器。在Python 2中,它稍微简单一些,因为zip返回一个列表。

temp = [[1,2], [3,4], [5,6]]
print list(zip(*temp)[1])

<强>输出

[2, 4, 6]

答案 1 :(得分:1)

你不能通过。 列表切片。在这里,您可以使用 list comprehension 表达式(建议的方法):

>>> temp = [[1,2], [3,4], [5,6]]
>>> [t[1] for t in temp]
[2, 4, 6]

为了在没有显式循环的情况下实现它,您可以将map()operator.itemgetter()一起使用:

>>> from operator import itemgetter
>>> list(map(itemgetter(1), temp))
[2, 4, 6]

即使您没有在此处明确看到 loop ,但在内部它会调用循环。没有循环就没有办法实现这一点。

答案 2 :(得分:1)

使用numpynumpy对于操作数组或矩阵非常强大和高效。 tutorial来到这里。

import numpy

temp = [[1,2], [3,4], [5,6]]
arr = numpy.array(temp)
print(arr[:,1])  
# array([2, 4, 6])

# convert back to list
l = list(arr[:,1])
print(l)
# [2, 4, 6]

答案 3 :(得分:0)

你可以直接通过列表创建一个这样的新列表:

a = [[1,2],[3,4],[5,6]]
l = [i[1] for i in a]

我现在拥有你想要的值。

最好的运气!

[编辑:与其他答案一样,即使没有明确可见的循环,也会有内部循环。另一种选择是使用numpy和切片。]

答案 4 :(得分:0)

这是一个循环:

a = [[1,2], [3,4], [5,6]]

items = list(map(lambda x: x[1], a))

print(items)

答案 5 :(得分:0)

首先使用来自itertools的链来链接嵌套列表,然后使用索引访问展平列表

from itertools import chain, islice
temp = [[1,2], [3,4], [5,6]]
temp_flatten = list(chain.from_iterable(temp))
# temp_flatten = [1,2,3,4,5,6]

# access with indexing
>>> temp_flatten[1::2] 
[2, 4, 6]

甚至更好地使用链和islice进行1次射击

from itertools import chain, islice
temp = [[1,2], [3,4], [5,6]]
list(islice(chain.from_iterable(temp), 1, None, 2))
# [2, 4, 6]