繁体   English   中英

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

[英]Python: pass list to another list but list is blank

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

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行左右打印为current_data下的实际信息,其余行打印如下。

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

在工作表中,我将信息传递给我也使用当前函数接收正确的数据。 但是,当我在函数之后执行 print(output_log) 时,我得到了所有 1500 行

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

任何帮助,将不胜感激。

您正在清除 for 循环内的列表,此处无需重用相同的列表,因此只需在 for 循环中对其进行初始化而不是清除它

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

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

current_data.clear()确实清除了列表,但这与之前附加的引用相同。

要解决您的问题,只需在 for 循环内移动current_data = [] (第 4 行)并删除current_data.clear()语句。

编辑:这是一个简短的示例,用于演示valuereference之间的区别。

my_list = []  # my_list is a variable that is pointing to a list
other_list = my_list  # other_list is a second variable that is pointing to the same list
my_list.append(1)
print(my_list)  # Prints out "[1]"
print(other_list)  # Also print out "[1]"

我们说两个变量都引用了同一个实例(列表)。 如果我们为my_list分配一个新列表会发生什么:

my_list = []
print(my_list)  # Prints out "[]"
print(other_list)  # Still prints out "[1]"

他们现在完全引用不同的列表。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM