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匹配数字..并将它们存储在两个不同的组中:

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

另一种解决方案。

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 回答