0

説明するのはかなり難しいですが、ここに私の問題があります。

sampleList = ['_ This is an item.','__ This is also an item']

sampleListを取得_して、最初の文字行でのみ発生するかどうかを確認し、それを。に置き換えてから、発生する#場合は。に置き換えます。__&

自分でも理解するのは少し難しいです。

基本的に、リストがある場合は、リストを処理し、可能なdictの最初のインスタンスのみを見つけて、対応する値に置き換えます。そして、そのリスト全体を返します。

編集:

説明が足りなかったらごめんなさい。

dictarray = {
'_':'&',
'__':'*#',
'____':'*$(@'
}

sampleList = ['_ This is an item.','__ This is also an item','_ just another _ item','____ and this last one']

出力:

sampleList = ['& This is an item.','*# This is also an item','& just another _ item','*$(@ and this last one']

キーがアイテムの先頭にあるかどうかをキャプチャできる必要があります。見つかった場合は、値に変更します。

4

2 に答える 2

5
# The original input data
dictarray = {
'_':'&',
'__':'*#',
'____':'*$(@'
}

sampleList = ['_ This is an item.','__ This is also an item','_ just another _ item','____ and this last one']

# Order the substitutions so the longest are first.
subs = sorted(dictarray.items(), key=lambda pair: len(pair[0]), reverse=True)

def replace_first(s, subs):
    """Replace the prefix of `s` that first appears in `subs`."""
    for old, new in subs:
        if s.startswith(old):
            # replace takes a count of the number of replacements to do.
            return s.replace(old, new, 1)
    return s

# make a new list by replace_first'ing all the strings.
new_list = [replace_first(s, subs) for s in sampleList]

print new_list

生成:

['& This is an item.', '*# This is also an item', '& just another _ item', '*$(@ and this last one']

ここでは、dictarrayをマッサージして、置換を最も長いものから順に並べ、短いプレフィックスが長いプレフィックスを排除しないようにしました。

于 2012-09-11T02:12:28.980 に答える
1

ここでの秘訣は、長いアンダースコア(__)をif条件に配置し、次に小さいアンダースコア( _)を条件に配置するelifことです。

dic = {
'_':'&',
'__':'*#',
'____':'*$(@'
}
lis=['_ This is an item.','__ This is also an item','_ just another _ item','____ and this last one']
for x in sorted(dic,key=len,reverse=True):
    for i,y in enumerate(lis):
        if y.startswith(x):
            lis[i]=y.replace(x,dic[x])

print(lis)

出力:

['& This is an item.', '*# This is also an item', '& just another & item', '*$(@ and this last one']
于 2012-09-11T02:01:49.473 に答える