1

文中の各単語をアスタリスクで変更したいのですが、ここでは 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()ラムダ関数を使用してアスタリスクに割り当てようとしましx = " * "たが、その方法はサポートされていません。

そのため、事前に感謝します。

4

4 に答える 4

2

あなたのコードは、すべての結合の間にアスタリスクを置きます。単語間に 2 つの結合があるため、2 つのアスタリスクです。

私はあなたが欲しいと思います

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

str.splitここで使用できますstr.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. 単語ごとに 1 つ追加*し、その後にスペースを追加します。 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 に答える