【问题标题】:Need help printing a list vertically需要帮助垂直打印列表
【发布时间】:2013-09-05 11:29:51
【问题描述】:

我对 Python 很陌生,来到这里是不得已而为之。我花了几个小时仔细研究我的笔记和互联网,试图弄清楚如何做到这一点,但无济于事。

我有一个与此类似的列表:

classes = ['''Thermodynamics, MSE345, Smith, Quantum Mechanics, MSE350, Johnson, Electrical Engineering, ECE322, Roberts, etc. etc.''']

我需要将班级、课程代码和教授垂直打印在一行上,如下所示:

热力学,MSE345,史密斯

量子力学,MSE350,约翰逊

由于列表用逗号分隔班级、代码和教授,我不知道如何将所有这些内容放在一起打印。

当我输入代码时 --> classes.split(','),它将每个逗号分隔的短语打印在它自己的行上,并且它们包含在''中。我需要去掉引号和括号。如果你能帮助我解决这个问题,我将不胜感激。不找人为我做作业,如果你能解释我需要使用的命令,我可以(希望)自己弄清楚其余的。这是我编程的第一周,我觉得这有点过头了!

【问题讨论】:

  • 为什么你的列表中有一个大字符串而不是每个逻辑项一个字符串?
  • msw,请不要在多行字符串文字中插入空格。
  • 点了,在你回滚之前,我意识到这是 doubleplusungood;对不起

标签: python list


【解决方案1】:

我不会说这是最好的方法,但如果这是你编程的第一周,它可能是最容易理解的

classes = "Thermodynamics, MSE345, Smith, Quantum Mechanics, MSE350, Johnson, Electrical Engineering, ECE322, Roberts"
classes = classes.split(',') #turn it into a list
for i in range(0, len(classes), 3): #every third index
    print classes[i] + ',' + classes[i+1] + ',' + classes[i+2] #print 3 elements with commas

输出

Thermodynamics, MSE345, Smith
Quantum Mechanics, MSE350, Johnson
Electrical Engineering, ECE322, Roberts

【讨论】:

  • +1 用于使用 OP 可能使用的工具进行操作。 CS101 可能会阻止将itertools 用于此类事情。
【解决方案2】:

不要使用只有一个项目的列表,而是将其变成如下所示的字符串:

classes = 'Thermodynamics, MSE345, Smith, Quantum Mechanics, MSE350, Johnson, Electrical Engineering, ECE322, Roberts, etc. etc.'

然后使用split(',') 制作一个用逗号分隔的每个项目的列表,然后将列表分隔成 3 个项目长的列表列表,就像这样

class_list = classes.split(",")

sorted_list = [class_list[i:i+3] for i in range(0, len(class_list), 3)]

print sorted_list

这将打印出来

[['Thermodynamics', ' MSE345', ' Smith'], [' Quantum Mechanics', ' MSE350', ' Johnson'], [' Electrical Engineering', ' ECE322', ' Roberts']]

【讨论】:

    【解决方案3】:

    首先,您要做的是将split 您的一长串类放到一个列表中,您可以使用str.split(',') 来做到这一点。然后,您可以以三个为一组迭代此列表以形成成对的类数据。为此,您可以使用itertools(特别是groupbydocumentation here

    from itertools import izip_longest
    
    def grouper(iterable, n, fillvalue=None):
        args = [iter(iterable)] * n
        return izip_longest(*args, fillvalue=fillvalue)
    
    classes = "Thermodynamics, MSE345, Smith, 
        Quantum Mechanics, MSE350, Johnson,
        Electrical Engineering, ECE322, Roberts,
        etc. etc."
    
    classes_list = classes.split(",")
    
    for i in grouper(classes_list,3): # or even grouper(classes.split(",")...)
        print str("".join(i)) # formatting fix
    

    输出:

     Thermodynamics MSE345 Smith
     Quantum Mechanics MSE350 Johnson
     Electrical Engineering ECE322 Roberts
    ...
    

    【讨论】:

      【解决方案4】:

      我最好的建议是让您使用字典而不是列表,或者至少在包含给定键的所有其他值的字典中使用一个列表

      【讨论】:

        【解决方案5】:

        嗯,如果我只想到最简单的解决方案...

        for i in range(len(classes))//3:
            j = i * 3
            print(', '.join(classes[j:j+3]))
        

        类似的东西应该可以。这是假设列表中的每个元素都是一些字符串......并且列表的长度是 3 的倍数,并且您希望以三个一组的形式逐行打印,以逗号分隔。

        【讨论】:

          【解决方案6】:
          1. len (classes) 为 1。“classes”是单个字符串。
          2. 因此,您不妨考虑类 = ''' .... ''' (或 foo = classes [0],以及操作的解决方案 富。
          3. 当你这样做时,你需要担心字符串跨越 多行。 ''' 结构允许后面的 ''' 出现在多行之后。但是,如果前面和结尾都用括号括起来,则只有一行。没有括号,您将得到一长串多行。
          4. 问题 - 班级名称或教师名称可能带有逗号 '''C、C#、C++ 和类似语言、CS203、Kernighan、Richie 等。 al,编辑,.....'''
          5. 即使在 Gotcha 案例中,您也可以将课程 ID 用作 “分隔符”,你需要担心教官被 与课程名称分开。呸

          【讨论】:

            【解决方案7】:
            def group(classlist, n):
                l = len(classlist)
                for inc in xrange(0, l, n):
                    if (inc + n) < l:
                        yield tuple(classlist[P] for P in xrange(inc, inc+n))
            
            classes = ['''Thermodynamics, MSE345, Smith, Quantum Mechanics, MSE350, Johnson, Electrical Engineering, ECE322, Roberts, etc. etc.'''][0].split(',')
            
            newlist = [ person for person in group(classes, 3) ]
            
            print newlist
            

            输出:

            [('Thermodynamics', ' MSE345', ' Smith'),
            (' Quantum Mechanics', ' MSE350', ' Johnson'), 
            (' Electrical Engineering', ' ECE322', ' Roberts')]
            

            【讨论】:

              【解决方案8】:

              另一种方法:

              In [28]: s = "Thermodynamics, MSE345, Smith, Quantum Mechanics, MSE350, Johnson, Electrical Engineering, ECE322, Roberts"
              
              In [29]: splits = s.split(', ')
              
              In [30]: n = len(splits)
              
              In [31]: zip(*[splits[i::3] for i in range(n / 3)])
              Out[31]:
              [('Thermodynamics', 'MSE345', 'Smith'),
               ('Quantum Mechanics', 'MSE350', 'Johnson'),
               ('Electrical Engineering', 'ECE322', 'Roberts')]
              

              【讨论】:

                猜你喜欢
                • 2021-01-29
                • 2013-02-12
                • 2015-01-30
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-08-15
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多