如何通过python-3中的输入功能将输入作为用户的子列表?

时间:2019-01-11 18:16:31

标签: python python-3.x list input sublist

我正在尝试从用户那里输入以下内容: [[1,2,3],4、5] 。其中列表中的 [1,2,3] 类型,int类型的 4和5 类型。

如何通过输入法做到这一点?

这是我的代码,但其中所有内容均为字符串类型。

from mainpage.services import ArticlesService
importlib.reload(ArticlesService)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 140, in reload
    raise TypeError("reload() argument must be a module")
TypeError: reload() argument must be a module

输出:-

输入您的列表:-1,2,3 4 5
['1,2,3','4','5']
类'str'
类“ str”

5 个答案:

答案 0 :(得分:0)

对于包含数字或列表的输入,它由程序检查并修改用户输入的字符串以获得所需的结果。

对于以下提供的输入:1,2,3 4 5,如示例中所示,您可以使用列表推导或映射来修改字符串并按照以下几行将其转换为int。

in_list = input("Enter your list :- ").split()
print(in_list)

in_list[0] = [int(s) for s in in_list[0].split(',')] #split on comma, typecast to int, reassign to 0th index
in_list[1:] = [int(s) for s in in_list[1:]] #typecast remaining values to int

#Alternate syntax using map
#in_list[0] = list(map(int,in_list[0].split(',')))
#in_list[1:] = list(map(int, in_list[1:]))

print(in_list)
#Output:
[[1, 2, 3], 4, 5]

答案 1 :(得分:0)

您可以使用eval

inp = input("Enter your list :- ").strip()
inp = eval(inp)

答案 2 :(得分:0)

更长一点,但这是另一种选择。

my_string是用户输入,该方法也适用于这种输入:

my_str = '1,2,3 4 5 7,8,9 10 11'

res = [ e.split(',') for e in my_str.split(' ') ]
for i, e in enumerate(res):
  if len(e) == 1:
    res[i] = int(e[0])
  else:
    res[i] = [ int(ee) for ee in e ]

print(res)
#=> [[1, 2, 3], 4, 5, [7, 8, 9], 10, 11]

答案 3 :(得分:0)

使用ast.literal_eval()(如Daniel Mesejo所评论):

import ast
in_list = ast.literal_eval(input("Enter your list :- "))
print(in_list)
print(type(in_list[0]))
print(type(in_list[1]))

输出:

[[1, 2, 3], 4, 5]
<class 'list'>
<class 'int'>

除了ast.literal_eval()之外,另一个用户建议只使用eval(),这也可以。有关为什么使用ast.literal_eval()更安全的讨论,请参考以下相关问题:Using python's eval() vs. ast.literal_eval()?

摘自ast文档:

  

这可用于安全地评估包含来自不受信任来源的Python值的字符串,而无需自己解析值。它无法评估任意复杂的表达式,例如涉及运算符或索引的对象。

答案 4 :(得分:0)

<table>
  <tr>
    <td>
      Column 1
    </td>
    <td>
      Column 2
    </td>
    <td>
      Column 3
    </td>
  </tr>
  <tr>
    <tr style="display: block;">
      <td>
        Broken
      </td>
      <td>
        Row
      </td>
      <td>
        !
      </td>
    </tr>
    <tr>
      <td style="display: inline-block;">
        Broken td
      </td>
      <td>
        !
      </td>
      <td>
        !
      </td>
    </tr>
    <tr>
      <td>
        Correct
      </td>
      <td>
        row
      </td>
      <td>
        !
      </td>
    </tr>
</table>