0

これらは私のリストです

i=["a","b"]
j=["abc","(3)","ab & ac", "(1,4)","xyz"]

そして、私は私の出力がこのようになりたい

j=["abc","a","ab & ac","b","xyz"]

そして私はこのように試しました、

val=0
for item in j:
    if item.isalpha():
        pass
    else:
        elem=i[val]
        j.replace(item, elem)
        val=val+1

英数字を含まない位置で、あるリストから別のリストに項目を挿入する方法は?

4

4 に答える 4

1

どの文字列にも出現しない文字または文字列がある場合は、string .join メソッドを使用してリストを単一の文字列に連結し、正規表現と re.sub 関数を使用して置換を行うことができます。その後、.split メソッドを使用して、文字列を分割してリストに戻すことができます。

>>> import re
>>> i=["a","b"]; j=["abc","(3)","ab & ac", "(1,4)","xyz"]
>>> js = "|".join(j) # merge j into one string
>>> print js
abc|(3)|ab & ac|(1,4)|xyz
>>> print re.sub("\(.*?\)", i[0], js)
abc|a|ab & ac|a|xyz
>>> print re.sub("\(.*?\)", i[0], js, count=1)
abc|a|ab & ac|(1,4)|xyz
>>> for r in i:
        js = re.sub("\(.*?\)", r, js, count=1)


>>> print js
abc|a|ab & ac|b|xyz

最後の for ループは、その方法を示しています。括弧で囲まれたフィールドは、左から右に一度に 1 つずつ入力されます。リストに戻すには:

jnew = js.split("|")

...これで完了です。

于 2013-08-30T03:37:34.870 に答える
1

"ab & ac" が英数字ではなく(& と空白のため)、タイプミスをしたと仮定すると、これでうまくいきます。

def removeNonAlpha(i,j):
    indexI = 0
    indexJ = 0
    while indexJ < len(j):
        if not j[indexJ].isalnum():
            j[indexJ] = i[indexI]
            indexI += 1
        indexJ += 1
    return j

>>>i=["a","b", "c"]
>>>j=["abc","(3)","ab & ac", "(1,4)","xyz"]
>>>removeNonAlpha(i,j)
['abc', 'a', 'b', 'c', 'xyz']

このコードは、j を完全に置き換えるのに十分な要素が i にあることも前提としています。

特別な理由で&記号を許可する必要がある場合 (これは、空白も許可する必要があることを意味します)、代替手段は次のとおりです。

def removeNonAlpha(i,j):
    indexI = 0
    indexJ = 0
    while indexJ < len(j):
        if not j[indexJ].replace('&', '').replace(' ', '').isalnum():
            j[indexJ] = i[indexI]
            indexI += 1
        indexJ += 1
    return j

>>>i=["a","b"]
>>>j=["abc","(3)","ab & ac", "(1,4)","xyz"]
>>>removeNonAlpha(i,j)
['abc', 'a', 'ab & ac', 'b', 'xyz']
于 2013-08-30T04:02:58.293 に答える
1

j これにより、文字を含むリスト内のリスト要素が保持されます

[s for s in j if any(c in string.letters for c in s)]
于 2013-08-30T03:21:54.777 に答える
0

「英数字」の定義が何であるかは明確ではありません。あなたの例では、DSMが指摘したように、「ab&ac」が失敗するisalphaを使用しています。isalpha が「英数字」の許容可能な定義であり、配列を変更しても問題ない場合は、次のことを提案します。

for index, item in enumerate(j):
    if not item.isalpha():
        j[index] = i.pop(0) if i else None

おそらくこれのリスト内包表記バージョンがありますが、面倒です。

サンプル入力を指定すると、上記のコードは次の結果を生成することに注意してください。

['abc', 'a', 'b', None, 'xyz']

これは、j の英数字以外のすべてのメンバーをカバーするのに十分なアイテムが i に実際にないためです。その場合は None を使用しました。

于 2013-08-30T04:00:03.233 に答える