【问题标题】:How to slice several strings in a list?如何对列表中的多个字符串进行切片?
【发布时间】: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


    【解决方案1】:

    您可以使用列表推导,像这样去除第一个字符

    >>> 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.itemgetterslice 函数(与[1:] 表单的作用相同)。

    【讨论】:

    • @pedroabreu 在 Python 中,the BDFL prefers List Comprehension over map
    • 另外,如果你想使用地图,你可以使用import operator; map(operator.itemgetter(slice(start, stop, step))。不是说你应该使用它,只是说它是一个存在的选项。 slice(start, stop, step)item[start:stop:step] 接收的内容,operator.itemgetter 是在对象上调用 slice 的函数。值得研究,因为它很有用。
    • @thefourtheye 是的,作为一个haskell爱好者,我已经习惯了使用map来停止使用它,现在在python中突然停止使用它哈哈。事实上,list comprehation 似乎比 python 中的 map 要自然得多。但是感谢您的提醒。
    【解决方案2】:
    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']
    

    【讨论】:

      猜你喜欢
      • 2014-07-08
      • 2015-10-01
      • 2021-11-20
      • 1970-01-01
      • 2012-11-20
      • 2011-12-03
      • 2021-03-12
      • 2012-07-13
      • 1970-01-01
      相关资源
      最近更新 更多