Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 附加列表问题_Python_List - Fatal编程技术网

Python 附加列表问题

Python 附加列表问题,python,list,Python,List,所以基本上我在这里要做的是扫描一个单词列表,检查字典中对应的条目是否在it_all_段落字符串中 下面的所有内容都不重要,问题在于前6行代码,如果我这样做了。追加(列表),然后我清除该列表基本上主列表也会被清除。 通过一些研究,我意识到这种情况正在发生,因为它只是一个指针,并没有真正将这些项目添加到列表中 我需要做的基本上是,每次索引“i”增加时,只需附加我在列表中找到的所有字符串列表,对于将来要再次找到的内容,在同一列表中添加一个新列表 假设期望的结果应该是: 但是,如果没有第3行到第7行的

所以基本上我在这里要做的是扫描一个单词列表,检查字典中对应的条目是否在it_all_段落字符串中

下面的所有内容都不重要,问题在于前6行代码,如果我这样做了。追加(列表),然后我清除该列表基本上主列表也会被清除。 通过一些研究,我意识到这种情况正在发生,因为它只是一个指针,并没有真正将这些项目添加到列表中

我需要做的基本上是,每次索引“i”增加时,只需附加我在列表中找到的所有字符串列表,对于将来要再次找到的内容,在同一列表中添加一个新列表

假设期望的结果应该是:

但是,如果没有第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(),工作得很好!这到底是什么意思?就像它在一段随机的内存中创建一个新的列表或者什么?是的,它创建了一个原始对象的副本。