我有一份公寓清单及其价格。数据大致如下:
['$2,973', '14 mo', '0 Bed', '/', '1 Bath', '533 sq.ft.', '/', 'Floor 6', 'Available 4/25/2020', 'Special Offer', '$3,973', '11 mo', '1 Bed', '/', '1 Bath', '533 sq.ft.', '/', 'Floor 6', 'Available 4/12/2020', 'Special Offer']
我想把这两个公寓列表分解成一个列表,其中"$"作为新列表的指示符。我写了这段代码,但由于某种原因,即使在执行else语句时,我的主"list"变量也会不断更新。你能帮我弄清楚为什么/发生了什么事吗?
list = []
tmp_list = []
for string in soup.stripped_strings:
if '$' in string:
print(tmp_list)
list.append(tmp_list)
print(list)
tmp_list.clear()
tmp_list.append(string)
print('if')
print(tmp_list)
print(list)
else:
tmp_list.append(string)
print('string', string)
print('else')
print(tmp_list)
print(list)
我从print语句得到的结果——无论出于什么原因,tmp_list和list即使通过else语句也会不断更新
[]
[[]]
if
['$2,973']
[['$2,973']]
string 14 mo
else
['$2,973', '14 mo']
[['$2,973', '14 mo']]
string 0 Bed
else
['$2,973', '14 mo', '0 Bed']
[['$2,973', '14 mo', '0 Bed']]
list
在更新tmp_list
时更新,因为tmp_list
在list
内部。
从本质上讲,tmp_list在您的代码中将始终是[item1, item2, ...]
,而list
将始终是[tmp_list]
。
此外,您不应该清除tmp_list
,而应该为其分配一个新列表(tmp_list = []
(,因为clear()
不会将列表更改为新列表。
本质上,每次将tmp_list.clear()
更改为tmp_list = []
以获得新的列表,如果len(tmp_list) > 0
:,则仅将tmp_list
附加到list
以下是没有打印的情况:
if len(tmp_list) > 0:
list.append(tmp_list)
tmp_list = []
tmp_list.append(string)
然后,在for循环通过之后,您需要将tmp_list
附加到list