试图将列表分解为列表列表,但主列表一直在无意中更新



我有一份公寓清单及其价格。数据大致如下:

['$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_listlist内部。

从本质上讲,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

最新更新