【问题标题】:Array Splitting in Python With Specific InputPython中具有特定输入的数组拆分
【发布时间】:2020-06-06 16:45:42
【问题描述】:

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

[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(','),但由于它们在实际数组中使用,因此不起作用。

数组的长度可以变化,上面的例子只是一个示例。

任何帮助将不胜感激!

【问题讨论】:

  • 也许向我们展示其余的代码,因为我觉得那个输入很可疑。
  • 这是控制台上的 实际 输入吗?有内括号但没有外括号?
  • @Chris 我只是想对数组进行试验并遍历它们,因为我是新手并且正在学习。但我似乎无法弄清楚如何将输入分成两个不同的数组。
  • 如果你从一个字符串开始,它会更清楚,所以明确一点:"[4,2,1,5,7],[4,1,2,3,5,7,1,2,7]" 如果你不是从一个字符串开始,这个问题就没有意义了。
  • 还有 FYR:它们不是数组。它们是列表。

标签: python list split


【解决方案1】:

我建议通过添加外括号然后使用literal_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])

【讨论】:

  • 即使不添加额外的[]也可以工作,并且会解析成一个元组。
  • @bereal Fair enogh.
【解决方案2】:

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

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]

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

【讨论】:

    【解决方案3】:

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

    你可以把它解压成两个变量,如下:

    str = '[4,2,1,5,7],[4,1,2,3,5,7,1,2,7]'
    
    arr1, arr2 = eval(str)
    

    注意:如果输入字符串可以来自第三方输入(例如在服务器应用程序中),则出于安全原因不应使用 eval,因为它可能允许执行任意代码,并且应该使用ast.literal_eval。 (请参阅 DYZ 的单独答案。)在上述输入的情况下,这也将返回一个 2 元组列表,因此使用 var1, var2 = ... 的解包不受影响。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多