0

読んでいる文字列と、区切り文字に基づいて分割してリストに保存することについて質問があります。

この入力は 1.2.3.4 です。どこ 。区切り文字です。分割を使用すると、最後にこの文字 "" が表示されます。このキャラクターは何ですか?

for element in data.split('.'):
    L.append(element)   
    print L  #prints out ["1","2","3","4",""] 

私の質問は、最後の配列要素 "" は何ですか? この配列だけでなく、文字列データからもこの要素を取り除きたいです。使ってみelement.rstrip(element)たけど消えない。私の混乱のほとんどは、Python で "" が参照するものから来ていると思います。私も使ってみL.remove("")ましたが、うまくいかないようです。

4

4 に答える 4

5

Python に で分割するように依頼しまし"1.2.3.4.""."。最後の後には何もない.ため、リストに空の要素が含まれます。

それを防ぐ最も簡単な方法は、分割する前に剥がすことです。

L = data.strip(".").split(".")

(すでにリストがあるのに、リストを繰り返し処理して、そこから別のリストを作成する理由がわかりません。)

于 2012-09-23T17:39:10.810 に答える
4

を使用strip()して最後の を削除し.ます。右側ののみを削除する場合は、data.strip(".")それを行います。または単にを削除します。rstrip(".").

In [35]: "1.2.3.4.".strip(".")
Out[35]: '1.2.3.4'
In [36]: "1.2.3.4.".strip(".").split(".")
Out[36]: ['1', '2', '3', '4']
于 2012-09-23T17:37:32.247 に答える
1

他の人がすでに書いたように、あなたの最後の結果には特徴がありません。""空文字列です。区切り文字のすべてのsplit()出現箇所で分割され、最後のものの後には何もないため、結果にそれ (何もない) が得られます。

数字から末尾のドットを削除する (末尾のドットがあることを知る必要がある) のではなく、空の要素を期待して破棄するようにコードを記述することをお勧めします。

for element in data.split('.'):
    if element:
        L.append(element) 

次のように、文字列の途中に 2 つの区切り文字がある場合、空の要素もスキップされます。"1.2..3."

ちなみに、これにはループは必要ありません。分割の結果を代入するか、リスト内包表記を使用して空の要素を削除するだけです。

L = data.split('.')                           # all parts: equivalent to your code
L = [ elt for elt in data.split('.') if elt ] # non-empty parts only
于 2012-09-23T18:32:39.330 に答える
0

末尾のドットが原因で取得します。分割する前に試してください:

L = L[:-1]

例えば:

>>> a = "1.2.3.4."
>>> b = a.split('.')
>>> b
['1', '2', '3', '4', '']
>>> b = a[:-1]
>>> b.split('.')
['1', '2', '3', '4']
于 2012-09-23T17:37:29.170 に答える