1

リスト文字列がある場合:

first = []
last = []

my_list = ['  abc   1..23',' bcd    34..405','cda        407..4032']

..に隣接する番号を対応するリストに追加するにはどうすればよいですか?取得するため:

first = [1,34,407]
last = [23,405,4032]

後でintに変換できるので、文字列も気になりません

first = ['1','34','407']
last = ['23','405','4032']
4

4 に答える 4

3

re.searchの間の番号を一致さ..せ、2つの異なるグループに保存するために使用します。

import re

first = []
last = []

for s in my_list:
  match = re.search(r'(\d+)\.\.(\d+)', s)
  first.append(match.group(1))
  last.append(match.group(2))

デモ

于 2012-09-23T22:36:56.637 に答える
3

私は正規表現を使用します:

import re
num_range = re.compile(r'(\d+)\.\.(\d+)')

first = []
last = []

my_list = ['  abc   1..23',' bcd    34..405','cda        407..4032']

for entry in my_list:
    match = num_range.search(entry)
    if match is not None:
        f, l = match.groups()
        first.append(int(f))
        last.append(int(l))

これは整数を出力します:

>>> first
[1, 34, 407]
>>> last
[23, 405, 4032]
于 2012-09-23T22:37:59.483 に答える
2

もう1つの解決策。

for string in my_list:
    numbers = string.split(" ")[-1]
    first_num, last_num = numbers.split("..")
    first.append(first_num)
    last.append(last_num)

my_list にスペースのない文字列がある場合、または一部の文字列の最後のスペースの後に ".." がない場合 (または、文字列の最後のスペースの後に複数の ".." がある場合) は、ValueError をスローします。 )。

実際、値がすべての文字列から実際に取得され、それらすべてが最後のスペースの後に配置されていることを確認したい場合、これは良いことです。処理しようとする文字列が予期しない形式である場合に備えて、try...catch ブロックを追加して何かを行うこともできます。

于 2012-09-23T22:39:43.547 に答える
0
 first=[(i.split()[1]).split("..")[0] for i in my_list]
 second=[(i.split()[1]).split("..")[1] for i in my_list]
于 2012-10-28T04:39:48.993 に答える