仅从输出中删除尾随空格
Remove only trailing whitespace from output
我有一项布置给我的家庭作业。基本上问题是:
编写一个程序,可以去除品牌名称并用通用名称替换它们。
下面的 table 显示了一些具有通用名称的品牌名称。该映射也已在您的程序中作为 BRANDS
字典提供给您。
BRANDS = {
'Velcro': 'hook and loop fastener',
'Kleenex': 'tissues',
'Hoover': 'vacuum',
'Bandaid': 'sticking plaster',
'Thermos': 'vacuum flask',
'Dumpster': 'garbage bin',
'Rollerblade': 'inline skate',
'Asprin': 'acetylsalicylic acid'
}
这是我的代码:
sentence = input('Sentence: ')
sentencelist = sentence.split()
for c in sentencelist:
if c in BRANDS:
d = c.replace(c, BRANDS[c])
print(d, end=' ')
else:
print(c, end=' ')
我的输出:
Sentence: I bought some Velcro shoes.
I bought some hook and loop fastener shoes.
预期输出:
Sentence: I bought some Velcro shoes.
I bought some hook and loop fastener shoes.
它看起来一样,但在我的输出中,在 'shoes.'
之后有一个额外的空格,而实际上不应该有空格。那么如何删除这个空格呢?
我知道你可以做 rstrip()
或 replace()
我试过了,但是当我只需要删除尾随空格而不删除任何其他空格时,它只会把所有东西混在一起。如果用户将品牌名称放在句子中间,而我使用 rstrip()
,它会将品牌名称和句子的其余部分连接在一起。
您的 end=' '
无条件地在您的输出中附加额外的空格。没有一致的方法来撤消此操作(回显退格字符仅适用于终端,搜索仅适用于文件等)。
诀窍是首先避免打印它:
sentence = input('Sentence: ')
sentencelist = sentence.split()
result = []
for c in sentencelist:
# Perform replacement if needed
if c in BRANDS:
c = BRANDS[c] # c.replace(c, BRANDS[c]) is weird way to spell BRANDS[c]
# Append possibly replaced value to list of results
result.append(c)
# Add spaces only in between elements, not at the end, then print all at once
print(' '.join(result))
# Or as a trick to let print add the spaces and convert non-strings to strings:
print(*result)
关键是使用字符串的 join
方法为您连接所有内容。例如,要在一堆字符串之间放置 space 而不是在最后一位之后放置 space,请执行
' '.join(bunch_of_strings)
字符串必须位于可迭代对象(如列表)中才能正常工作。你可以像这样制作列表:
edited_list = []
for word in sentence_list:
if word in BRANDS:
edited_list.append(BRANDS[word])
else:
edited_list.append(word)
一个更短的选择是
edited_list = [BRANDS.get(word, word) for word in sentence_list]
无论哪种方式,您都可以使用join
方法组合编辑的句子:
print(' '.join(edited_list))
这就是 Python,您可以在不使用中间列表的情况下将整个事情作为一行完成:
print(' '.join(BRANDS.get(word, word) for word in sentence_list))
最后,您可以使用 splat 表示法在 print
中加入。在这里,您将列表的每个元素作为单独的参数传递,并使用默认的 sep
参数插入 spaces:
print(*edited_list)
顺便说一句,d = c.replace(c, BRANDS[c])
完全等同于 d = BRANDS[c]
。由于字符串是不可变的,任何时候你这样做 c.replace(c, ...
,你只是以一种有点难以辨认的方式返回替换。
您不必拆分单词并遍历它。
试试这个代码,它会起作用,不会再出现白色问题 space
sentence = ' '.join(str(BRANDS.get(word, word)) for word in input_words)
在这里,列出名称"input_words"并添加您要处理的行数
学习愉快!
问题是 print(c, end=' ')
总是会在 c
之后打印一个 space。这是一个非常小的更改来解决这个问题:
sentence = input('Sentence: ')
sentencelist = sentence.split()
is_first = True
for c in sentencelist:
if not is_first:
print(' ', end='')
is_first = False
if c in BRANDS:
d = c.replace(c, BRANDS[c])
print(d, end='')
else:
print(c, end='')
正如其他人所指出的,这可以整理一下,例如,d = c.replace(c, BRANDS[c])
相当于 d = BRANDS[c]
,如果将其更改为 c = BRANDS[c]
,则可以使用单个 print
调用且没有 else
子句。
但是你也必须小心你的方法,因为对于像 "I bought a Hoover." 这样的句子它会失败 sentence.split()
操作将保持 "Hoover." 作为一个单独的项目,这将由于额外时间未通过 c in BRANDS
测试。您可以尝试将单词与标点分开,但这并不容易。另一种解决方案是将所有替换应用于每个元素,或者等效地应用于整个句子。这在这种情况下应该可以正常工作,因为您可能不必担心可能嵌入较长单词的替换单词(例如,不小心替换了 'caterpillar' 中嵌入的 'cat')。所以这样的事情可能行得通:
new_sentence = sentence
for brand, generic in BRANDS.items():
new_sentence = new_sentence.replace(brand, generic)
print(new_sentence)
我有一项布置给我的家庭作业。基本上问题是:
编写一个程序,可以去除品牌名称并用通用名称替换它们。
下面的 table 显示了一些具有通用名称的品牌名称。该映射也已在您的程序中作为 BRANDS
字典提供给您。
BRANDS = {
'Velcro': 'hook and loop fastener',
'Kleenex': 'tissues',
'Hoover': 'vacuum',
'Bandaid': 'sticking plaster',
'Thermos': 'vacuum flask',
'Dumpster': 'garbage bin',
'Rollerblade': 'inline skate',
'Asprin': 'acetylsalicylic acid'
}
这是我的代码:
sentence = input('Sentence: ')
sentencelist = sentence.split()
for c in sentencelist:
if c in BRANDS:
d = c.replace(c, BRANDS[c])
print(d, end=' ')
else:
print(c, end=' ')
我的输出:
Sentence: I bought some Velcro shoes.
I bought some hook and loop fastener shoes.
预期输出:
Sentence: I bought some Velcro shoes.
I bought some hook and loop fastener shoes.
它看起来一样,但在我的输出中,在 'shoes.'
之后有一个额外的空格,而实际上不应该有空格。那么如何删除这个空格呢?
我知道你可以做 rstrip()
或 replace()
我试过了,但是当我只需要删除尾随空格而不删除任何其他空格时,它只会把所有东西混在一起。如果用户将品牌名称放在句子中间,而我使用 rstrip()
,它会将品牌名称和句子的其余部分连接在一起。
您的 end=' '
无条件地在您的输出中附加额外的空格。没有一致的方法来撤消此操作(回显退格字符仅适用于终端,搜索仅适用于文件等)。
诀窍是首先避免打印它:
sentence = input('Sentence: ')
sentencelist = sentence.split()
result = []
for c in sentencelist:
# Perform replacement if needed
if c in BRANDS:
c = BRANDS[c] # c.replace(c, BRANDS[c]) is weird way to spell BRANDS[c]
# Append possibly replaced value to list of results
result.append(c)
# Add spaces only in between elements, not at the end, then print all at once
print(' '.join(result))
# Or as a trick to let print add the spaces and convert non-strings to strings:
print(*result)
关键是使用字符串的 join
方法为您连接所有内容。例如,要在一堆字符串之间放置 space 而不是在最后一位之后放置 space,请执行
' '.join(bunch_of_strings)
字符串必须位于可迭代对象(如列表)中才能正常工作。你可以像这样制作列表:
edited_list = []
for word in sentence_list:
if word in BRANDS:
edited_list.append(BRANDS[word])
else:
edited_list.append(word)
一个更短的选择是
edited_list = [BRANDS.get(word, word) for word in sentence_list]
无论哪种方式,您都可以使用join
方法组合编辑的句子:
print(' '.join(edited_list))
这就是 Python,您可以在不使用中间列表的情况下将整个事情作为一行完成:
print(' '.join(BRANDS.get(word, word) for word in sentence_list))
最后,您可以使用 splat 表示法在 print
中加入。在这里,您将列表的每个元素作为单独的参数传递,并使用默认的 sep
参数插入 spaces:
print(*edited_list)
顺便说一句,d = c.replace(c, BRANDS[c])
完全等同于 d = BRANDS[c]
。由于字符串是不可变的,任何时候你这样做 c.replace(c, ...
,你只是以一种有点难以辨认的方式返回替换。
您不必拆分单词并遍历它。
试试这个代码,它会起作用,不会再出现白色问题 space
sentence = ' '.join(str(BRANDS.get(word, word)) for word in input_words)
在这里,列出名称"input_words"并添加您要处理的行数
学习愉快!
问题是 print(c, end=' ')
总是会在 c
之后打印一个 space。这是一个非常小的更改来解决这个问题:
sentence = input('Sentence: ')
sentencelist = sentence.split()
is_first = True
for c in sentencelist:
if not is_first:
print(' ', end='')
is_first = False
if c in BRANDS:
d = c.replace(c, BRANDS[c])
print(d, end='')
else:
print(c, end='')
正如其他人所指出的,这可以整理一下,例如,d = c.replace(c, BRANDS[c])
相当于 d = BRANDS[c]
,如果将其更改为 c = BRANDS[c]
,则可以使用单个 print
调用且没有 else
子句。
但是你也必须小心你的方法,因为对于像 "I bought a Hoover." 这样的句子它会失败 sentence.split()
操作将保持 "Hoover." 作为一个单独的项目,这将由于额外时间未通过 c in BRANDS
测试。您可以尝试将单词与标点分开,但这并不容易。另一种解决方案是将所有替换应用于每个元素,或者等效地应用于整个句子。这在这种情况下应该可以正常工作,因为您可能不必担心可能嵌入较长单词的替换单词(例如,不小心替换了 'caterpillar' 中嵌入的 'cat')。所以这样的事情可能行得通:
new_sentence = sentence
for brand, generic in BRANDS.items():
new_sentence = new_sentence.replace(brand, generic)
print(new_sentence)