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我现在加了一张便条。