刮取返回非空的空列表索引

2024-04-27 01:01:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我从一个网页上抓取数据,当我将数据加载到一个列表列表中时,它看起来是这样的

[['text', 'text', '', '', 'text', 'text']]

我正在尝试从所有列表中删除空字符串,但到目前为止,我尝试的所有操作都不起作用。你知道吗

results = []
for list in scrape_list:
    for item in scrape_list:
        if item != '':
            results.append(item)



OUTPUT: [['text', 'text', '', '', 'text', 'text']]



scrape_list1 = list(filter(None, scrape_list))
     OUTPUT: [['text', 'text', '', '', 'text', 'text']]``

我想知道这些索引是否真的不是空字符串,而是包含一个值。如果其他人遇到这种情况,请随时告诉我发生了什么,因为我想不出来。你知道吗


Tags: 数据字符串textin网页列表foroutput
3条回答

正如@chunjef在评论中提到的,您在scrape_list中迭代了两次。顺便说一下,一个更紧凑的方法是

>>> ll = [['text', 'text', '', '', 'text', 'text']]
>>> results = [item for l in ll for item in l if item!='']
>>> results
['text', 'text', 'text', 'text']

其中[item for l in ll for item in l if item!='']既可以展平列表ll,也可以删除与空字符串''不同的任何l

如果你想要一个纯粹的python方式,你可以使用嵌套列表理解

[[y for y in x if y] for x in a]

在我的电脑上,控制台是这样的

>>> a
[['text', 'text', '', '', 'text', 'text']]
>>> [[y for y in x if y] for x in a]
[['text', 'text', 'text', 'text']]
>>> 

我猜只是一个打字错误(正如@chunjef在评论中提到的):

results = []
for lst in scrape_list:
    for item in lst:  # do NOT iterate through scrape_list here!!
        if item != '':
            results.append(item)

scrape_list中的单个项是一个list并且肯定是!= '',因此这个内部列表被附加到results,因此您的输出是。scrape_list的嵌套特性也会使filter语句失败。你可以用

scrape_list1 = [s for l in scrape_list for s in filter(None, l)]

得到一个简单的字符串列表。你知道吗

相关问题 更多 >