Python中操作列表项的方法

3
line = "english: while  french: pendant que  spanish: mientras  german: whrend "

words = line.split('\t')

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

print words

'line'中的字符串以Tab分隔,但每个译文单词后面都有一个空格字符,因此虽然split返回了我想要的列表,但每个词末尾都有一个令人烦恼的空格字符。

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

3个回答

1

只需使用line.split()即可获得剥离空白的单词列表。

在循环内更新each不会对words列表造成任何改变。

应该这样做

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

或者

words=map(str.rstrip,words)

查看地图文档以获取有关地图的详细信息。

或者使用列表推导式进行一行代码。

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

或者使用正则表达式的.findall方法

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

在我正在解析的数据中,例如会将法语单词“pendant que”拆分为两个单词。 - dave
@dave 这是要调用的函数名称,其后跟随着参数。map将在words中的每个元素上使用该函数。因此,map本身使用由您提供的funcname(arg)函数名,即str.rstrip。 - extraneon
2
"downvote"? 嗯,我并不介意。但如果有解释的话会更好。 - YOU
最后一个问题:关于str.strip,你能否解释一下为什么不是string.strip()呢?我以为strip()是string.py模块的一部分,还有其他约定吗,你会输入没有括号的方法名吗? - dave
@dave:当您想要函数对象本身时,请不要使用括号进行输入,而当您想要函数调用的结果时,请使用括号。 - Ignacio Vazquez-Abrams
显示剩余2条评论

1
words = line.split('\t')
words = [ i.rstrip() for i in words ]

太好了,我没想到 Python 还支持列表推导式。 - dave
或者你甚至可以将这个组合成一行代码 - SilentGhost

0

你可以使用正则表达式:

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

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

编辑:在 Roger Pate 指出错误后已进行修正。


1
在此之后,您仍需要删除最后一个空格(字符串中的最后一个字符)。 - Roger Pate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接