1

我希望在星号上更改句子中的每个单词,我在这里尝试使用一行代码,但我不知道如何获得每个单词的星号

from string import join, split
def asterisk(s):
        return  join(map(lambda x: x[:0], split(s)), " * ")

print asterisk("lame af sentence")

输出:

 *  * 

如您所见,它在 . 之后仅更改 2 个单词split()。我尝试使用lambda 函数分配x = " * "给星号,但它不支持这种方式。

因此,任何帮助将不胜感激,在此先感谢!

4

4 回答 4

2

您的代码在每个连接之间添加一个星号。单词之间有 2 个连接,所以有两个星号。

我想你想要

 join(map(lambda x: "*", split(s)), " ")
于 2013-09-29T15:55:31.403 回答
2

你可以在这里使用str.splitstr.join

>>> strs = "lame af sentence"
>>> ' '.join('*'*len(strs.split()))
'* * *'

这里str.split在空格处拆分字符串并返回一个列表:

>>> spl = strs.split()
>>> spl
['lame', 'af', 'sentence']

现在使用这个列表的长度,str.join我们可以这样做:

>>> ' '.join("*"*len(spl))
'* * *'

如果您想保留空格,正则表达式可能会有所帮助:

>>> import re
>>> strs = "lame af        sentence"
>>> re.sub(r'\S+', '*', strs)
'* *        *'
于 2013-09-29T15:55:48.633 回答
1

这是您可以使用的另一个:

def asterisk(s):
    return ' '.join(['*' for word in s.split()])

print asterisk("lame af sentence")
于 2013-09-29T15:59:57.817 回答
1

按着这些次序:

  1. 数一数你有多少字: words=len(s.split())
  2. 每个单词加一个*,后跟一个空格: for i in range(words): out+='* '
  3. 剪切最后一个空格: out=out[:-1]

在一行中:return '* '.join([i for i in range(len(s.split()))])[:-1]

于 2013-09-29T16:00:00.337 回答