我有一个输入:
temp = [[1,2], [3,4], [5,6]]
我希望输出为:
[2,4,6]
如何在 python 中使用循环 ?
有没有像temp [:] [1]这样的东西? (即所有子集都采用第二个元素)
请注意:这是一个示例数据。我需要为更大的数据集执行此操作。因此,具有良好性能的实现将会有所帮助。
答案 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)
使用numpy
。 numpy
对于操作数组或矩阵非常强大和高效。 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]