当用'..'Python分隔时,将两个整数附加到列表中

时间:2012-09-23 22:30:55

标签: python string list integer find

如果我有一个列表字符串:

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 个答案:

答案 0 :(得分: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))

<强> DEMO

答案 1 :(得分: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]

答案 2 :(得分: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中有一个没有空格的字符串,或者没有&#34; ..&#34;它会抛出一个ValueError。在一些字符串中的最后一个空格之后(或者在字符串的最后一个空格之后有多个&#34; ..&#34;)。

事实上,如果你想确保从所有字符串中真正获得值,并且所有字符串都放在最后一个空格之后,这是一件好事。您甚至可以添加一个try ... catch块来执行某些操作,以防它尝试处理的字符串处于意外格式。

答案 3 :(得分:0)

 first=[(i.split()[1]).split("..")[0] for i in my_list]
 second=[(i.split()[1]).split("..")[1] for i in my_list]