首页 > 解决方案 > 为什么我无法访问在我的方法中生成的这个列表?

问题描述

我正在尝试编写一种将给定时间仅转换为数字的方法(以便于从小时到分钟的整数转换)。当我在方法中打印生成的列表时,它工作得很好。

但是,当我尝试从方法外部访问 first_two_digits_list 或 last_two_digits_list 时,它无法这样做(即使使用全局声明)。

有人可以向我解释为什么会这样,因为我不知道。此外,如果有人可以帮助我找到访问此列表的解决方案或其他方式,那将是完美的!

times_list = [["11:00","12:00"], ["12:00","13:00"]]

# Method that converts list into sections of digits (for ease of integer use)
def ConvertToDigits():
    global first_value, second_value, third_value, fourth_value, last_two_digits_list

    # initial counter for while loop
    n = 0

    # two new lists of digits
    first_two_digits_list = []
    last_two_digits_list = []

    while n < len(times_list):
        first_digit_value = ((((times_list[n])[0])[0]) + (((times_list[n])[0])[1]))
        second_digit_value = ((((times_list[n])[1])[0]) + (((times_list[n])[1])[1]))

        third_digit_value = ((((times_list[n])[0])[3]) + (((times_list[n])[0])[4]))
        fourth_digit_value = ((((times_list[n])[1])[3]) + (((times_list[n])[1])[4]))

        first_two_digits_list.append([(first_digit_value), (second_digit_value)])
        last_two_digits_list.append([(third_digit_value), (fourth_digit_value)])

        n+= 1

标签: pythonlistmethods

解决方案


在您的代码中,first_two_digits_list或者last_two_digits_list不是全局变量。它们是 function 的局部变量ConvertToDigits。但是,times_list它是一个全局变量,因为它是在函数外部定义的,这就是为什么您可以在ConvertToDigits. 解决您的问题的一个简单方法是,

times_list = [["11:00","12:00"], ["12:00","13:00"]]
# two new lists of digits
first_two_digits_list = []
last_two_digits_list = []
# Method that converts list into sections of digits (for ease of integer use)
def ConvertToDigits():
    # initial counter for while loop
    n = 0
    while n < len(times_list):
        first_digit_value = ((((times_list[n])[0])[0]) + (((times_list[n])[0])[1]))
        second_digit_value = ((((times_list[n])[1])[0]) + (((times_list[n])[1])[1]))
        third_digit_value = ((((times_list[n])[0])[3]) + (((times_list[n])[0])[4]))
        fourth_digit_value = ((((times_list[n])[1])[3]) + (((times_list[n])[1])[4]))
        first_two_digits_list.append([(first_digit_value), (second_digit_value)])
        last_two_digits_list.append([(third_digit_value), (fourth_digit_value)])
        n+= 1
ConvertToDigits()
print(first_two_digits_list,last_two_digits_list)

输出

[['11', '12'], ['12', '13']] [['00', '00'], ['00', '00']]

从评论跟进

另一种方法:

times_list = [["11:00","12:00"], ["12:00","13:00"]]
# Method that converts list into sections of digits (for ease of integer use)
def ConvertToDigits():
    # initial counter for while loop
    global first_two_digits_list, last_two_digits_list
    first_two_digits_list = []
    last_two_digits_list = []
    n = 0
    while n < len(times_list):
        first_digit_value = ((((times_list[n])[0])[0]) + (((times_list[n])[0])[1]))
        second_digit_value = ((((times_list[n])[1])[0]) + (((times_list[n])[1])[1]))
        third_digit_value = ((((times_list[n])[0])[3]) + (((times_list[n])[0])[4]))
        fourth_digit_value = ((((times_list[n])[1])[3]) + (((times_list[n])[1])[4]))
        first_two_digits_list.append([(first_digit_value), (second_digit_value)])
        last_two_digits_list.append([(third_digit_value), (fourth_digit_value)])
        n+= 1
ConvertToDigits()
print(first_two_digits_list,last_two_digits_list)

输出

[['11', '12'], ['12', '13']] [['00', '00'], ['00', '00']]

推荐阅读