【问题标题】:printing each item in a list打印列表中的每个项目
【发布时间】:2016-12-20 12:48:59
【问题描述】:

当我执行附加的代码时,我希望它:

return sub_list

对于 mainList 中的所有 sub_lists(总共 9 个 sub_lists)。 我该怎么做?

            for sub_list in mainList:
            sub_list = sub_list.split(",")
            if len(sub_list) == 9:
                for i in sub_list:
                    try:
                        i = int(i)
                    except ValueError:
                        return "Error! has to contain integers only"
                    else:
                        i = str(i)
                print(sub_list)
            elif len(sub_list) > 9:
                return 'Error! more than 9 numbers in a line'

当我执行代码时,会出现以下情况:

['3', '8', '0', '4', '0', '0', '7', '0', '2']
['0', '0', '0', '7', '2', '0', '0', '0', '0']
['0', '0', '0', '7', '2', '0', '0', '0', '0']
['0', '2', '4', '8', '0', '6', '9', '0', '0']
['0', '0', '0', '0', '0', '0', '0', '0', '0']
['0', '0', '1', '2', '0', '3', '5', '4', '0']
['0', '0', '0', '0', '5', '8', '0', '0', '0']
['9', '0', '3', '0', '0', '4', '0', '2', '8']
['0', '0', '8', '0', '0', '0', '0', '5', '7']
['3', '8', '0', '4', '0', '0', '7', '0', '2']
['0', '0', '0', '7', '2', '0', '0', '0', '0']
['0', '0', '0', '7', '2', '0', '0', '0', '0']
['0', '2', '4', '8', '0', '6', '9', '0', '0']
['0', '0', '0', '0', '0', '0', '0', '0', '0']
['0', '0', '1', '2', '0', '3', '5', '4', '0']
['0', '0', '0', '0', '5', '8', '0', '0', '0']
['9', '0', '3', '0', '0', '4', '0', '2', '8']
['0', '0', '8', '0', '0', '0', '0', '5', '7']

【问题讨论】:

  • 您只能return 一次。如果你需要返回九个东西,为什么不把这些列表放到另一个列表或者一个元组中呢?
  • 它们已经在一个列表(mainList)中,问题是我想在新行中打印每个 sub_list..
  • 不清楚你在这里期待什么逻辑。返回一串错误消息而不只是引发错误是不寻常的。您是否要打印所有九个,但前提是它们都包含恰好九个整数(或可以转换为整数的字符串或浮点数)?请澄清输入和预期输出。
  • 然后只需在 for 循环之后打印它们,它们已经通过了所有条件。
  • “不起作用”究竟是什么意思?请给出您实际尝试过的minimal reproducible example

标签: python list for-loop exception


【解决方案1】:

一个问题是i = int(i)。这不会更新列表中的值。 而不是 for:ing 将它们转换为整数,您可以使用列表理解:(我尽可能少地修改)

for sub_list in mainList:
    sub_list = sub_list.split(",")
    if len(sub_list) == 9:
        try:
            # Create a new list that is printed
            print([int(i) for i in sub_list])
        except ValueError:
            return "Error! has to contain integers only"
    elif len(sub_list) > 9:
        return 'Error! more than 9 numbers in a line'
    else:
        return 'Error! less than 9 numbers in a line'

这样做的缺点是,如果您在最后一个列表中有错误,则会打印该列表之前的所有其他有效列表。如果您只想在没有错误的情况下打印它们,则必须将它们保存在您打印或在 for 循环后返回的(临时)列表中。

【讨论】:

  • 我试过了,结果是:[3, 8, 0, 4, 0, 0, 7, 0, 2] [0, 0, 0, 7, 2, 0, 0, 0, 0] [0, 0, 0, 7, 2, 0, 0, 0, 0] [0, 2, 4, 8, 0, 6, 9, 0, 0] [0, 0, 0, 0 , 0, 0, 0, 0, 0] [0, 0, 1, 2, 0, 3, 5, 4, 0] [0, 0, 0, 0, 5, 8, 0, 0, 0] [ 9, 0, 3, 0, 0, 4, 0, 2, 8] [0, 0, 8, 0, 0, 0, 0, 5, 7] [3, 8, 0, 4, 0, 0, 7, 0, 2] [0, 0, 0, 7, 2, 0, 0, 0, 0] [0, 0, 0, 7, 2, 0, 0, 0, 0] [0, 2, 4 , 8, 0, 6, 9, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 1, 2, 0, 3, 5, 4, 0 ] [0, 0, 0, 0, 5, 8, 0, 0, 0] [9, 0, 3, 0, 0, 4, 0, 2, 8] [0, 0, 8, 0, 0, 0, 0, 5, 7] 打印两次的子列表
  • 在这种情况下,您似乎在 mainList 中有两次它们如您所见,每次 for 循环迭代只有一个打印语句。
  • 另外,如何在注释行中添加代码?我是堆栈流的新手..
  • 当我打印 mainList 时,它们出现一次:['3,8,0,4,0,0,7,0,2', '0,0,0,7,2,0 ,0,0,0', '0,0,0,7,2,0,0,0,0', '0,2,4,8,0,6,9,0,0', '0 ,0,0,0,0,0,0,0,0', '0,0,1,2,0,3,5,4,0', '0,0,0,0,5,8 ,0,0,0', '9,0,3,0,0,4,0,2,8', '0,0,8,0,0,0,0,5,7']跨度>
  • 这不会发生在我身上。你有更多的打印报表吗?
【解决方案2】:

试试这个 -

for sub_list in mainList:
    if len(sub_list) == 9:
        ans = []
        for num in sub_list:
            ans.append(str(num))
    return ','.join(ans)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2022-08-08
    相关资源
    最近更新 更多