我正在尝试删除句子中的前导昏迷,但我不明白为什么它不起作用
text = ",greetings friends"
text_l = text.split()
for word in text_l:
if word.startswith(','):
word = word[1:]
text = ' '.join(text_l)
>>> ,greetings friends
但是确实如此。
text = ",greetings friends"
text_l = text.split()
for word in text_l:
if word.startswith(','):
indw = text_l.index(word)
text_l[indw] = word[1:]
text = ' '.join(text_l)
>>> greetings friends
答案 0 :(得分:1)
您的第一个代码不起作用,因为它仅将新值分配给局部变量word
,不带:更改列表中的字符串。您的第二个代码有效(如您所注意到的),但是效率很低,因为您必须找到要剥离的每个单词的index
。相反,您可以使用enumerate
来同时迭代单词和索引,也可以使用lstrip
而不是对字符串进行切片。
text_l = text.split()
for i, word in enumerate(text_l):
if word.startswith(','):
text_l[i] = word.lstrip(",")
text = ' '.join(text_l)
此外,当使用lstrip
时,if
不再是必需的,我们可以将整个内容压缩为' '.join(...)
中的单行生成器表达式:
text = ' '.join(word.lstrip(",") for word in text.split())
答案 1 :(得分:1)
Python中的变量不能用作指针,请参见this SO question以获得更好的解释。
在代码的第一部分,您将更改变量word
的值,而不是单词所引用的对象,因此循环不会更改单词的原始列表中的任何内容。
第二个代码确实更改了原始列表。
建议,一种更蟒蛇的方式来做您需要的事情:
original_text = ",greetings friends"
text = ' '.join(part.lstrip(',') for part in original_text.split())
text = ' '.join(map(lambda part: part.lstrip(','), original_text.split())) # If you want a colleague to ask you "what's that???" :)
答案 2 :(得分:0)
如果要删除前导逗号,则lstrip是您所需的命令。
text = ",greetings friends"
text_l = text.split()
text = []
for word in text_l:
if word.startswith(','):
word = word.lstrip(',')
text.append(word)
text = ' '.join(text)
文本输出为:
greetings friends