需要帮助垂直打印列表

时间:2013-09-05 02:06:30

标签: python list

我是Python的新手,来到这里是最后的选择。我花了几个小时仔细阅读我的笔记和互联网,试图弄清楚如何做到这一点,但无济于事。

我有一个类似于这个列表的列表:

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

我需要在一行中垂直打印列表,课程代码和教授,如下所示:

  

热力学,MSE345,史密斯

     

量子力学,MSE350,约翰逊

由于列表中有逗号分隔类,代码和教授,我无法弄清楚如何在一行中将所有这些内容打印在一起。

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

8 个答案:

答案 0 :(得分:4)

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

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 :(得分:2)

首先,您要做的是将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
...

答案 2 :(得分: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 :(得分:1)

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

答案 4 :(得分:1)

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

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

这样的事情应该有用。这假设列表中的每个元素都是一些字符串...并且列表的长度是3的倍数,并且您希望以逗号分隔的三行一组打印。

答案 5 :(得分:1)

  1. len(classes)是1.“classes”是单个字符串。
  2. 因此,您可以考虑使用classes =的解决方案 '''....'''(或foo = classes [0],以及运行的解决方案 FOO。
  3. 当你这样做时,你需要担心字符串跨越 多行。 '''结构允许尾随'''在以后发生多行。但如果以括号开头并以括号结束,则您有一行。如果没有括号,你就会有一个长串的多行。
  4. Gotcha - 类或教师的名称可能有逗号 '''C,C#,C ++和类似语言,CS203,Kernighan,Richie等。 al,编辑,.....'''
  5. 即使在Gotcha案例中,您也可以使用课程ID “分隔符”,你需要担心教练的存在 与课程名称分开。呸

答案 6 :(得分:0)

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')]

答案 7 :(得分:0)

又一种方法:

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')]