目前,我正在做一些网页抓取工作。我的摘录之一返回了站点上每个项目的完整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)
但是我正在寻找额外的步骤以将其输出到首选输出中。对正则表达式组合建议有任何列表理解吗?
此外,如果这是重复项,则将非常感谢您提供链接。
谢谢。
答案 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]
>>>