Python 附加列表问题
所以基本上我在这里要做的是扫描一个单词列表,检查字典中对应的条目是否在it_all_段落字符串中 下面的所有内容都不重要,问题在于前6行代码,如果我这样做了。追加(列表),然后我清除该列表基本上主列表也会被清除。 通过一些研究,我意识到这种情况正在发生,因为它只是一个指针,并没有真正将这些项目添加到列表中 我需要做的基本上是,每次索引“i”增加时,只需附加我在列表中找到的所有字符串列表,对于将来要再次找到的内容,在同一列表中添加一个新列表 假设期望的结果应该是:Python 附加列表问题,python,list,Python,List,所以基本上我在这里要做的是扫描一个单词列表,检查字典中对应的条目是否在it_all_段落字符串中 下面的所有内容都不重要,问题在于前6行代码,如果我这样做了。追加(列表),然后我清除该列表基本上主列表也会被清除。 通过一些研究,我意识到这种情况正在发生,因为它只是一个指针,并没有真正将这些项目添加到列表中 我需要做的基本上是,每次索引“i”增加时,只需附加我在列表中找到的所有字符串列表,对于将来要再次找到的内容,在同一列表中添加一个新列表 假设期望的结果应该是: 但是,如果没有第3行到第7行的
但是,如果没有第3行到第7行的部分(必须修复),我会得到如下结果:
[“a”、“b”、“c”、“d”、“e”、“f”、“g”]
对于我以后必须处理的东西来说,这是一个混乱的过程。有什么建议吗
for i in range(len(gr_completed_sequences)):
if len(traduzione_it) == 0: #Stuff i'm trying to make work
pass
else:
ordered_traduzione_it.append(traduzione_it)
traduzione_it.clear()
#From here on doesn't really matter
words = gr_completed_sequences[i].split()
for c in range(len(words) -1, -1, -1):
gr_clean_word = words[c].strip(".,:;|?")
if len(gr_it[gr_clean_word]) == 1:
traduzione = "".join(gr_it[gr_clean_word])
if traduzione in it_all_paragraphs:
traduzione_it.append(traduzione)
gr_completed_sequences[i] = words
continue
else:
words.pop(c)
gr_completed_sequences[i] = words
这是预期的行为,因为两者都是同一对象的别名,可以通过以下示例进行验证:
tr = [1, 2]
or_tr = [[3]]
or_tr.append(tr)
print(or_tr)
tr.clear()
print(or_tr)
输出:
[[3], [1, 2]]
[[3], []]
[[3], [1, 2]]
[[3], [1, 2]]
您可以通过创建列表的副本并将其附加到结果列表中来避免这种情况,如下所示:
tr = [1, 2]
or_tr = [[3]]
or_tr.append(tr.copy())
print(or_tr)
tr.clear()
print(or_tr)
输出:
[[3], [1, 2]]
[[3], []]
[[3], [1, 2]]
[[3], [1, 2]]
嗯,我不知道存在一个.copy(),工作得很好!这到底是什么意思?就像它在一段随机的内存中创建一个新的列表或者什么?是的,它创建了一个原始对象的副本。