如果我有一个列表字符串:
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']
答案 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]