我有一个来自Python的变量vk_read
,它处理这样的数据:['id168233095']
现在,我试图在脚本在列表中运行后从这个变量“vk_read”收集所有数据。应该是:['id168233095', 'id1682334534', 'id16823453', 'etc...']
if vk_read:
vk_ids = []
for line in vk_read:
if vk_read != '':
vk_ids.append(vk_read)
print(vk_ids)
结果是:
['id168233095']
['id168233095', 'id168233095']
['id168233095', 'id168233095', 'id168233095']
['id168233095', 'id168233095', 'id168233095', 'id168233095']
['id168233095', 'id168233095', 'id168233095', 'id168233095', 'id168233095']
['id168233095', 'id168233095', 'id168233095', 'id168233095', 'id168233095', 'id168233095']
更改了一些建议代码后(请参阅本文末尾)
if vk_read not in vk_ids:
vk_ids.append(vk_read)
print(vk_ids)
但在这种情况下,结果是:
['id45849605']
['id91877071']
['id17422363']
['id119899405']
['id65045632']
['id168233095']
这意味着我的vk_read
添加了10次,然后我的脚本开始添加下一个。
同时尝试list.insert()
-得到相同的结果。(!!!)
如何运行此循环,以便在脚本运行尽可能多次后,在一个列表中捕获所有不同的结果,因为可以从分析的文件中找到数据。
注:
我已经按照list1.append(list0)
的建议更新了代码,但是在我的例子中,这个方法仍然返回与上面描述的相同的结果。
并更改了列表名称以避免进一步混淆。
上次更新 谢谢你们的帮助,伙计们,你们真的在用正确的方式推我:same on stackoverflow
The problem appears to be that you are reinitializing the list to an empty list in each iteration:
from html.parser import HTMLParser
import re, sys, random, csv
with open('test.html', 'r', encoding='utf-8') as content_file:
read_data = content_file.read()
vk_ids = []
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
href = str(attrs)
for line in href:
id_tag = re.findall('/\S+$', href)
id_raw = str(id_tag)
if re.search('/\w+\'\)\]', id_raw):
global vk_read
vk_read = id_raw
else:
break
for ch in ['/', ')', '[', ']', '"', "'"]:
if ch in vk_read:
vk_read = vk_read.replace(ch, "")
# https://stackoverflow.com/questions/30328193/python-add-string-to-a-list-loop
for vk_id in vk_read:
if vk_id not in vk_ids:
vk_ids.append(vk_read)
break
print(vk_ids)
break
N.B. 上次更改后
print(type(vk_ids))
<class 'list'>
怎么样:
似乎您在一个循环中,
vk_read
是一个在每次迭代时更改的字符串:在代码中,没有使用循环中的
line
变量。在每次迭代中,都要插入整个vk_read
变量。假设vk_read是一个列表,您可以使用列表理解:
如果你需要逆转(就像你使用
insert
的情况一样,只要使用reversed
:然而,
vk_read
似乎是一个字符串而不是一个列表。相关问题 更多 >
编程相关推荐