【问题标题】:To get the list elements at odd places in a list made by using map function使用 map 函数获取列表中奇数位置的列表元素
【发布时间】:2015-12-13 07:45:27
【问题描述】:

这是我一直在尝试的代码。它读取一个包含两个列表的 .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                

【问题讨论】:

  • 发布示例文件内容和你得到的输出..
  • 如果你使用的是python2,那么不要输入[]。单独使用D2=map(int, fo.readline().split())。您现在有一个包含一个元素的列表,另一个来自地图的列表。所以很明显[1::2] 是行不通的
  • @BhargavRao 除了删除方括号之外还有其他方法可以消除这个错误吗?

标签: python list python-2.7 dictionary


【解决方案1】:

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]]

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

【讨论】:

  • 除了删除方括号还有其他方法可以消除这个错误吗?
  • 这里显示了列表理解方法,但是,如果您不喜欢这样,删除多余的括号有什么问题?另一种方法是使用:d2 = D2[0][1::2] 访问列表的第一个(也是唯一一个)项目。最好的方法是使用列表推导。
【解决方案2】:

这应该可行:

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())

它也应该可以工作。

【讨论】:

  • 除了删除方括号还有其他方法可以消除这个错误吗?
猜你喜欢
  • 2012-09-08
  • 2018-09-25
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
相关资源
最近更新 更多