Python:将列表传递给另一个列表,但列表为空

Python:将列表传递给另一个列表,但列表为空,python,excel,list,function,openpyxl,Python,Excel,List,Function,Openpyxl,我正在使用python 3.7和openpyxl。我正在尝试将数据从工作表解析为列表。在这个函数中,最初我是直接从一个电子表格中提取信息到一个列表中,然后使用openpyxl粘贴到另一个工作表中,但是我无法使用excel过滤器等,所以现在我尝试在列表中编辑信息。问题是,当我试图将信息解析到该列表时,它在当前的_数据中显示得很好,但当我附加该列表时,我会得到不同的信息,几乎就像它正在覆盖该列表一样。请参阅下面的函数和输出。先谢谢你 def cut_sheet_up(wsn, nws, output

我正在使用python 3.7和openpyxl。我正在尝试将数据从工作表解析为列表。在这个函数中,最初我是直接从一个电子表格中提取信息到一个列表中,然后使用openpyxl粘贴到另一个工作表中,但是我无法使用excel过滤器等,所以现在我尝试在列表中编辑信息。问题是,当我试图将信息解析到该列表时,它在当前的_数据中显示得很好,但当我附加该列表时,我会得到不同的信息,几乎就像它正在覆盖该列表一样。请参阅下面的函数和输出。先谢谢你

def cut_sheet_up(wsn, nws, output_log):
    x=0
    ws = wb[wsn]
    current_data = []
    for rowOfCellObjects in ws.iter_rows(min_row=0, min_col=0):
        current_data.clear()
        for cellObj in rowOfCellObjects:
            if cellObj.value is None:
                current_data.append('')
                # print causes ' value in front of string
            elif isinstance(cellObj.value, datetime) or isinstance(cellObj.value, time):
                current_data.append(cellObj.value)
            else:
                current_data.append(str(cellObj.value))
        nws.append(current_data)
        if wb[wsn] == wb['output_log']:
            x+=1
            print(current_data)
            output_log.append(current_data)
        else:
            pass
前150行左右作为当前_数据下的实际信息打印,其余行打印如下

['foo', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
在工作表中,我使用当前函数将信息传递给我接收正确的数据。但是,当我在函数之后执行printoutput_日志时,我得到所有1500行

['foo', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']

任何帮助都将不胜感激。

您正在清除for循环中的列表,这里不需要重复使用相同的列表,因此只需在for循环中初始化它,而不是清除它

for rowOfCellObjects in ws.iter_rows(min_row=0, min_col=0):
    current_data = []

您正在清除for循环中的列表,这里不需要重复使用相同的列表,因此只需在for循环中初始化它,而不是清除它

for rowOfCellObjects in ws.iter_rows(min_row=0, min_col=0):
    current_data = []

这是因为在循环的每次迭代中都使用相同的列表

current_data.clear确实会清除列表,但这与前面附加的引用相同

要解决您的问题,只需将当前的_data=[]行移动到for循环中,然后删除当前的_data.clear语句

编辑:这里有一个简短的示例来演示值和引用之间的差异

我们说这两个变量引用列表中的同一个实例。如果我们将新列表分配给我的列表,会发生什么情况:

它们现在指的是不同的清单


与此相关的是“按值传递”和“按引用传递”的概念,您可能会发现了解这些概念很有用。

这是因为您在循环的每个迭代中都使用相同的列表

current_data.clear确实会清除列表,但这与前面附加的引用相同

要解决您的问题,只需将当前的_data=[]行移动到for循环中,然后删除当前的_data.clear语句

编辑:这里有一个简短的示例来演示值和引用之间的差异

我们说这两个变量引用列表中的同一个实例。如果我们将新列表分配给我的列表,会发生什么情况:

它们现在指的是不同的清单


与此相关的是传递值和传递引用的概念,您可能会发现了解这一点很有用。

这也是一个很好的答案,因为我不太理解这方面的引用概念,现在我将对其进行研究。一个示例通常是显示差异的好方法。编辑:Woops已按enter键。我将写一个简短的例子。我编辑了答案,希望能更好地解释这个问题。这也是一个很好的答案,因为我不太理解这方面的引用概念,现在我将对其进行研究。一个例子通常是展示差异的一个好方法。编辑:Woops已按enter键。我将写一个简短的例子。我编辑了答案,希望能更好地解释这个问题。
my_list = []
print(my_list)  # Prints out "[]"
print(other_list)  # Still prints out "[1]"