从字符串列表中仅提取每个字符串的数字?

时间:2018-12-31 04:00:14

标签: python string list integer

目前,我正在做一些网页抓取工作。我的摘录之一返回了站点上每个项目的完整ID。

看起来像:

['ID: 1234', 'ID: 456', 'ID: 8899']

我想运行一个迭代器,该迭代器仅返回列表中每个项目的整数值。

(首选)

[1234, 456, 8899]

我已经看到许多与提取整数有关的问题,但是它们都建议解决方案将每个数字作为新列表中的索引返回,例如(当前)

[1,2,3,4,4,5,6,8,8,9,9]

我可以通过以下方式实现这一目标:

testList = []
for i in list:
     id = re.findall('\d+', i)
     testList.append(id)

但是我正在寻找额外的步骤以将其输出到首选输出中。对正则表达式组合建议有任何列表理解吗?

此外,如果这是重复项,则将非常感谢您提供链接。

谢谢。

6 个答案:

答案 0 :(得分:3)

l=['ID: 1234', 'ID: 456', 'ID: 8899']
print([int(x.split(':')[1]) for x in l])

输出

[1234, 456, 8899]

答案 1 :(得分:0)

简便的方法是拆分列表中的每个元素,因为它用空格'':

分隔'ID:'和数字
lst = ['ID: 1234', 'ID: 456', 'ID: 8899']
testList = []

for ele in lst:
   id_num = ele.split()[1]
   testList.append(id_num)

答案 2 :(得分:0)

str.isnumeric检查字符串是否可以解释为数字。如果您想获取数字,无论位置如何,都应使用此数字。

lst = ['ID: 1234', 'ID: 456', 'ID: 8899']
nums = list(map(lambda s:int(''.join([c for c in s if c.isnumeric()])), lst))
print(nums) # [1234, 456, 8899]

但是,如果您知道格式始终带有ID:,那么bitto的答案将是最佳选择。

答案 3 :(得分:0)

CC?=gcc
CFLAGS:=-Wall -Werror -D_POSIX_C_SOURCE=200112L $(CFLAGS)

cd?=.

objects_nix=if/tty.o
objects:=sub.o if.o $(objects_nix)

ifdef SO
CFLAGS+=-fPIC

bin=libmsh.so
else
bin=libmsh.a
endif

.PHONY : clean

$(bin) :


libmsh.a : $(objects)
    $(AR) -r -c -s $@ $(objects)

libmsh.so : $(objects)
    @echo
    @echo If you have resumed compilation after not having used the SO flag,
    @echo you should run make clean.
    @echo
    $(LD) $(LDFLAGS) -shared -o $@ $(objects)

test : $(cd)/test.c $(bin)
ifdef SO
    $(CC) $(CFLAGS) -I$(cd) $(LDFLAGS) -L. -lmsh -Wl,-rpath,. -o $@ $(cd)/test.c
else
    $(CC) $(CFLAGS) -I$(cd) $(LDFLAGS) -o $@ $(cd)/test.c $(bin)
endif

%.o : $(cd)/%.c
    $(CC) $(CFLAGS) -c -o $@ $<

clean :
    rm -f libmsh.so libmsh.a
    rm -f $(objects)
    rm -f test.o test

答案 4 :(得分:0)

您还可以将列表理解与元组拆包一起使用:

>>> l = ['ID: 1234', 'ID: 456', 'ID: 8899']
>>> [int(y.lstrip()) for _, y in (z.split(':') for z in l)]
[1234, 456, 8899]

在转换为整数之前,还使用str.lstrip()从字符串的左侧去除空格。

答案 5 :(得分:0)

使用正则表达式查找所有匹配的条目。下面的模式 捕获列表中所有匹配的数字。 然后,map将捕获列表中的每个输入字符串转换为整数。

>>> import re
>>> data = "['ID: 1234', 'ID: 456', 'ID: 8899']"
>>> map(lambda x: int(x), re.findall("'ID: (\d+)'", data))
[1234, 456, 8899]
>>>