我有一项分配给我的家庭作业任务。基本上问题是:
编写一个程序,可以去掉品牌名称并用通用名称替换它们。
下表显示了一些具有通用名称的品牌名称。该映射也已在您的程序中作为 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(),它会将品牌名称和句子的其余部分连接在一起。
最佳答案
关键是使用字符串的 join
方法来连接所有内容。例如,要在一堆字符串之间放置一个空格,而不在最后一位之后放置空格,请执行
' '.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
参数插入空格:
print(*edited_list)
顺便说一句,d = c.replace(c, BRANDS[c])
完全等同于 d = BRANDS[c]
,毫无意义。由于字符串是不可变的,因此任何时候执行 c.replace(c, ...
) 时,您都只是以一种难以辨认的方式返回替换项。
关于python - 仅从输出中删除尾随空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51941949/