【问题标题】:Converting input (from stdin) into lists将输入(从标准输入)转换为列表
【发布时间】:2013-10-12 17:32:42
【问题描述】:

我需要将输入(整数系列)转换成一堆列表。

示例输入:

3
2
2 2 4 5 7

样本输出:

list1=[3]
list2=[2]
list3=[2,2,4,5,7]

我正在尝试这样做:

list=[]
import sys
for line in sys.stdin:
    list.append(line)

但打印列表返回

['3\n', '2\n', '2 2 4 5 7']

【问题讨论】:

    标签: python arrays list input


    【解决方案1】:

    使用split将字符串拆分成列表,例如:

    >>> '2 2 4 5 7'.split()
    ['2', '2', '4', '5', '7']
    

    如您所见,元素是字符串。如果您想将元素作为整数,请使用 int 和列表推导:

    >>> [int(elem) for elem in '2 2 4 5 7'.split()]
    [2, 2, 4, 5, 7]
    

    所以,在你的情况下,你会做这样的事情:

    import sys
    
    list_of_lists = []
    
    for line in sys.stdin:
        new_list = [int(elem) for elem in line.split()]
        list_of_lists.append(new_list)
    

    你最终会得到一个列表列表:

    >>> list_of_lists
    [[3], [2], [2, 2, 4, 5, 7]]
    

    如果您想将这些列表作为变量,只需执行以下操作:

    list1 = list_of_lists[0]  # first list of this list of lists
    list1 = list_of_lists[1]  # second list of this list of lists
    list1 = list_of_lists[2]  # an so on ...
    

    【讨论】:

    • 这行得通!但是,如果我想将该列表分解为三个单独的列表,我是否只需事先命名这 3 个列表并重复上述操作?
    【解决方案2】:

    这是一种方法:

    import ast
    line = '1 2 3 4 5'
    list(ast.literal_eval(','.join(line.split())))
    => [1, 2, 3, 4, 5]
    

    这个想法是,对于您阅读的每一行,您都可以使用literal_eval() 将其转换为一个列表。另一个更短的选择是使用列表推导:

    [int(x) for x in line.split()]
    => [1, 2, 3, 4, 5]
    

    以上假设数字是整数,如果数字有小数,请将int()替换为float()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 2019-01-31
      相关资源
      最近更新 更多