【问题标题】:manipulating list items python操作列表项python
【发布时间】:2010-03-11 10:39:10
【问题描述】:
line = "english: while  french: pendant que  spanish: mientras  german: whrend "

words = line.split('\t')

for each in words:
 each = each.rstrip()

print words

'line' 中的字符串是制表符分隔的,但在每个翻译后的单词后面都有一个空格字符,所以虽然 split 返回我之后的列表,但每个单词在字符串末尾都有一个空格字符,令人讨厌。

在循环中,我试图遍历列表并删除字符串中的任何尾随空格,但它似乎不起作用,建议?

【问题讨论】:

    标签: python string


    【解决方案1】:

    只要line.split() 可以给你剥离的单词列表。

    在循环内更新each 不会对words 列表进行任何更改

    应该这样做

    for i in range(len(words)):
        words[i]=words[i].rstrip()
    

    或者

    words=map(str.rstrip,words)
    

    See the map docs了解地图详情。

    或者一个带有列表理解的班轮

    words=[x.rstrip() for x in line.split("\t")]
    

    或使用正则表达式 .findall

    words=re.findall("[^\t]+",line)
    

    【讨论】:

    • 在数据解析中,例如将法语单词“pendant que”分成两个单词
    • 好的,那你可以试试我的第二个例子for i in range(len(words)): ...words=map(str.rstrip,words)
    • 啊,谢谢。我看到 python 分享了一些像 haskell 这样的语言的好处。在这种情况下,在 map 函数中 str.strip 是一个常量吗?没有一组括号感觉很奇怪...
    • @dave 是要调用的函数的名称,后面有参数。 map 将对单词中的每个元素使用该函数。所以 map 本身使用 funcname( arg ) 和你给出的 funcname,str.rstrip。
    • 否决?好吧,我只是不介意。但如果有解释就好了。
    【解决方案2】:
    words = line.split('\t')
    words = [ i.rstrip() for i in words ]
    

    【讨论】:

    • 很好。我没有意识到 python 做了列表推导
    • 或者您甚至可以将其组合成一条线
    【解决方案3】:

    你可以使用正则表达式:

    import re
    words = re.split(r' *\t| +$', line)[:-1]
    

    这样您就可以将可能的序列定义为分隔符。由于 * 运算符,它还允许多个空格(或根本没有空格)。

    编辑:在 Roger Pate 指出错误后修复。

    【讨论】:

    • 在此之后您仍然需要删除最后一个空格(字符串中的最后一个字符)。
    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 2017-02-08
    • 2019-09-24
    相关资源
    最近更新 更多