【发布时间】:2015-02-28 05:07:42
【问题描述】:
我有一个类似的列表
my_list = ['#005', '#003', '#002']
我想要一个带有['005','003','002'] 的列表。我正在寻找类似map([:1], mylist) 的东西。存在吗?
【问题讨论】:
标签: python string list python-2.7 python-3.x
我有一个类似的列表
my_list = ['#005', '#003', '#002']
我想要一个带有['005','003','002'] 的列表。我正在寻找类似map([:1], mylist) 的东西。存在吗?
【问题讨论】:
标签: python string list python-2.7 python-3.x
您可以使用列表推导,像这样去除第一个字符
>>> my_list = ['#005', '#003', '#002']
>>> [item[1:] for item in my_list]
['005', '003', '002']
如果你想使用map函数,你需要传递一个函数给它,它会做同样的剥离,像这样
>>> map(lambda item: item[1:], my_list)
['005', '003', '002']
这里我们将lambda expression 传递给地图,地图会获取每一项并返回剥离后的字符串。
或者,您可以像这样习惯性地使用str.lstrip 函数
>>> [item.lstrip('#') for item in my_list]
['005', '003', '002']
同样的lstrip函数可以像这样和map一起使用
>>> map(lambda item: item.lstrip('#'), my_list)
['005', '003', '002']
注意:如果您使用的是 Python 3.x,则 map 返回一个可迭代的 map 对象。您需要对其进行迭代并将其转换为列表,如下所示
>>> my_list = ['#005', '#003', '#002']
>>> map(lambda item: item[1:], my_list)
<map object at 0x7fa6b301ef98>
>>> list(map(lambda item: item[1:], my_list))
['005', '003', '002']
作为scott_fakename mentioned in the comments,您可以对这个问题进行功能性接触,就像这样
>>> from operator import itemgetter
>>> list(map(itemgetter(slice(1, None)), my_list))
['005', '003', '002']
这使用operator.itemgetter 和slice 函数(与[1:] 表单的作用相同)。
【讨论】:
map
import operator; map(operator.itemgetter(slice(start, stop, step))。不是说你应该使用它,只是说它是一个存在的选项。 slice(start, stop, step) 是 item[start:stop:step] 接收的内容,operator.itemgetter 是在对象上调用 slice 的函数。值得研究,因为它很有用。
In [120]: my_list = ['#005', '#003', '#002']
In [121]: new_list = [ele[1:] for ele in my_list]
In [122]: new_list
Out[122]: ['005', '003', '002']
【讨论】: