Python:通过命令提示符在嵌套的数字列表中进行解析

Python:通过命令提示符在嵌套的数字列表中进行解析,python,list,recursion,nested,numbers,Python,List,Recursion,Nested,Numbers,我正在尝试编写一个python程序(rec_list_sum.py),该程序递归地查找嵌套数字列表的和 我输入到Powershell终端: python rec_list_sum.py [1,2,3,[4,5],[6,7],8] 并且我的函数接受如下数组: import sys def recursive_list_sum(array): total = 0 for ele in array: if isinstance(ele, list):

我正在尝试编写一个python程序(rec_list_sum.py),该程序递归地查找嵌套数字列表的和

我输入到Powershell终端:

python rec_list_sum.py [1,2,3,[4,5],[6,7],8]
并且我的函数接受如下数组:

import sys

def recursive_list_sum(array):

    total = 0

    for ele in array:
        if isinstance(ele, list):
            total = total + recursive_list_sum(ele)
        else:
            total = total + ele

    return total
这是我遇到的问题,解析中的输入:

if __name__ == "__main__":
    string = sys.argv[1]
    digits = [int(i) for i in str(string)]
    ans = recursive_list_sum(digits)

    print(ans)

我的代码可以在jupyter笔记本上运行,但我似乎无法使用PowerShell将此输入解析为python。有人能解释一下如何使用吗?

您可以使用
ast.literal\u eval
将输入字符串解析为Python表达式:

from ast import literal_eval
ans = recursive_list_sum(literal_eval(sys.argv[1]))

您可以这样编写解析器:

def parse(s):
    def _parse(s):
        output = []
        index = 0
        num = ''
        while index < len(s):
            char = s[index]
            index += 1
            if char.isdigit():
                num += char
            if char in ',]' and num:
                output.append(int(num))
                num = ''
            if char == '[':
                sublist, offset = _parse(s[index:])
                output.append(sublist)
                index += offset
            elif char == ']':
                break
        return output, index
    return _parse(s)[0][0]
返回:

[1, 2, 3, [4, 5], [6, 7], 8]

可以将json库与方法加载()一起使用

然后,ans将是一种可以正常迭代的列表类型

 >>> type(json.loads(ans))
 <class 'list'>
>类型(json.loads(ans))

相信我,我已经浏览了该网站上的现有帖子,但没有一篇涉及到嵌套数字列表中的解析。如果你是唯一一个使用它的人,你可以使用eval
digits=eval(string)
有效,谢谢!除了导入ast,还有其他方法吗?很高兴能为您提供帮助。您可以参考我的另一个答案,了解如何自己解析输入的示例。
import json
ans = json.loads(sys.argv[1])
 >>> type(json.loads(ans))
 <class 'list'>