Python中带有特定输入的数组拆分

Python中带有特定输入的数组拆分,python,list,split,Python,List,Split,如果在同一行中有两个数组作为输入,例如 [4,2,1,5,7],[4,1,2,3,5,7,1,2,7] 是否可以使用上述输入创建单独的数组 arr1 = [4,2,1,5,7] arr2 = [4,1,2,3,5,7,1,2,7] 我尝试使用split(','),但由于它们在实际数组中使用,因此不起作用 数组的长度可能不同,上面的示例只是一个示例 任何帮助都将不胜感激 一旦使用eval将字符串转换为一个包含两个列表的两元素元组。(在这种情况下,外圆括号不是强制性的。) 您可以将其解压为两个变量

如果在同一行中有两个数组作为输入,例如

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

是否可以使用上述输入创建单独的数组

arr1 = [4,2,1,5,7]
arr2 = [4,1,2,3,5,7,1,2,7]
我尝试使用
split(',')
,但由于它们在实际数组中使用,因此不起作用

数组的长度可能不同,上面的示例只是一个示例


任何帮助都将不胜感激

一旦使用
eval
将字符串转换为一个包含两个列表的两元素元组。(在这种情况下,外圆括号不是强制性的。)

您可以将其解压为两个变量,如下所示:

str = '[4,2,1,5,7],[4,1,2,3,5,7,1,2,7]'

arr1, arr2 = eval(str)


注意:如果输入字符串可能来自第三方输入(例如在服务器应用程序中),则出于安全原因,不应使用eval,因为它可以允许执行任意代码,而应使用
ast.literal\u eval
。(参见DYZ的单独回答。)对于上面显示的输入,这也将返回一个列表的2元组,因此使用
var1,var2=…
进行的解包不受影响。

一旦使用
eval
从字符串转换为一个包含两个列表的2元素元组。(在这种情况下,外圆括号不是强制性的。)

您可以将其解压为两个变量,如下所示:

str = '[4,2,1,5,7],[4,1,2,3,5,7,1,2,7]'

arr1, arr2 = eval(str)

注意:如果输入字符串可能来自第三方输入(例如在服务器应用程序中),则出于安全原因,不应使用eval,因为它可以允许执行任意代码,而应使用
ast.literal\u eval
。(参见DYZ的单独回答。)对于上面显示的输入,这也将返回一个2元组的列表,因此使用
var1,var2=…
解包不受影响。

我建议通过添加外括号,然后使用
literal\u eval将输入“伪装”为格式良好的列表:

import ast
s = "[4,2,1,5,7],[4,1,2,3,5,7,1,2,7]"
parts = ast.literal_eval("[" + s + "]")
#[[4, 2, 1, 5, 7], [4, 1, 2, 3, 5, 7, 1, 2, 7]]
或者不添加任何内容并将输入视为列表的元组:

parts = ast.literal_eval(s)
#([4, 2, 1, 5, 7], [4, 1, 2, 3, 5, 7, 1, 2, 7])
我建议通过添加外括号,然后使用
literal\u eval
,将输入“伪装”为格式良好的列表:

import ast
s = "[4,2,1,5,7],[4,1,2,3,5,7,1,2,7]"
parts = ast.literal_eval("[" + s + "]")
#[[4, 2, 1, 5, 7], [4, 1, 2, 3, 5, 7, 1, 2, 7]]
或者不添加任何内容并将输入视为列表的元组:

parts = ast.literal_eval(s)
#([4, 2, 1, 5, 7], [4, 1, 2, 3, 5, 7, 1, 2, 7])

这不是一种简单的方法,但是如果目标是学习操作字符串和列表,那么实际上可以将其作为字符流进行艰难的解析

a = "[4,2,1,5,7],[45,1,2,3,5,7,100,2,7]"

l = []

current_n = ''
current_l = None

for c in a:
    if c == '[':
        current_l = []
    elif c == ",":
        if current_l is not None:
            current_l.append(int(current_n))
            current_n = ''
    elif c.isdigit():
        current_n += c
    elif c == "]":
        current_l.append(int(current_n))
        l.append(current_l)
        current_n = ''
        current_l = None

l1, l2  = l
print(l1, l2)
# [4, 2, 1, 5, 7] [45, 1, 2, 3, 5, 7, 100, 2, 7]

这不是你通常会做的事情,但是一个好的练习和它的简单性应该是相当快的。

这不是一个简单的方法,但是如果目标是学习操作字符串和列表,你实际上可以将其作为一个字符流进行解析

a = "[4,2,1,5,7],[45,1,2,3,5,7,100,2,7]"

l = []

current_n = ''
current_l = None

for c in a:
    if c == '[':
        current_l = []
    elif c == ",":
        if current_l is not None:
            current_l.append(int(current_n))
            current_n = ''
    elif c.isdigit():
        current_n += c
    elif c == "]":
        current_l.append(int(current_n))
        l.append(current_l)
        current_n = ''
        current_l = None

l1, l2  = l
print(l1, l2)
# [4, 2, 1, 5, 7] [45, 1, 2, 3, 5, 7, 100, 2, 7]

这不是您通常会做的事情,但是一个很好的练习和它的简单性应该是相当快的。

可能会向我们展示代码的其余部分,因为我对该输入似乎有怀疑。这是控制台上的实际输入吗?有内括号,但没有外括号?@Chris我只是想用数组进行实验,并对它们进行迭代,因为我是新手,正在学习。但我似乎不知道如何将输入拆分为两个不同的数组。如果您是从字符串开始的,那么会更清楚,所以请明确:
“[4,2,1,5,7],[4,1,2,3,5,7,1,2,7]”
如果您不是从字符串开始的,那么问题就没有真正意义。仅供参考:它们不是数组。它们是列表。可能会向我们展示代码的其余部分,因为我怀疑这些输入。这是控制台上的实际输入吗?有内括号,但没有外括号?@Chris我只是想用数组进行实验,并对它们进行迭代,因为我是新手,正在学习。但我似乎不知道如何将输入拆分为两个不同的数组。如果您是从字符串开始的,那么会更清楚,所以请明确:
“[4,2,1,5,7],[4,1,2,3,5,7,1,2,7]”
如果您不是从字符串开始的,那么问题就没有真正意义。仅供参考:它们不是数组。它们是列表。即使不添加额外的
[]
,它也可以工作,并将解析为一个元组。@bereal Fair enogh。即使不添加额外的
[]
,它也可以工作,并将解析为一个元组。@bereal Fair enogh。不要使用
eval
@DYZ我现在添加了一个注释。不要使用
eval
@DYZ我现在加了一张便条。