使用map函数获取列表中奇数位置的列表元素

时间:2015-12-13 07:45:27

标签: python list python-2.7 dictionary

这是我一直在尝试的代码。它读取包含两个列表的.txt文件。它们分别由D1和D2读取。在D2中,我只需要奇数位置的元素。我尝试过的代码如下所示,并没有给我所需的输出。这是代码:

import cv2
import numpy


fo = open("Test_input0.txt","r")
D1=[map(int, fo.readline().split())]
D2=[map(int, fo.readline().split())]
d2 = D2[1::2]


print d2

它给出的输出是:

[ ]

.txt文件内容采用以下格式:

1 2 1 3 7 6 2 9 8 1 5 4
5 10 6 11 15 15                

2 个答案:

答案 0 :(得分:2)

map()返回一个列表,然后使用[]将其换行到另一个列表中。当你尝试

d2 = D2[1::2]

您正尝试从索引1切片包含单个项目的列表。因此,您将获得一个返回的空列表。

您可以删除周围的[]

来更正它
D1= map(int, fo.readline().split())
D2= map(int, fo.readline().split())

或者,通常被认为是更多Pythonic,列表理解:

D1 = [int(x) for x in fo.readline().split()]
D2 = [int(x) for x in fo.readline().split()]

现在D2[1::2]应该在奇数索引处为D2提供项目。

您甚至可以在一个列表理解中组合这两个操作:

D2 = [int(x) for x in fo.readline().split()[1::2]]

的优点是只将所需的值转换为整数。

答案 1 :(得分:1)

这应该有效:

fo = open("Test_input0.txt","r")
D1 = [int(x) for x in next(fo).split()]
D2 = [int(x) for x in next(fo).split()]
D2 = D2[1::2]

唯一的问题是额外的[]

变化:

D1=[map(int, fo.readline().split())]

成:

D1 = map(int, fo.readline().split())

它也应该有用。