1

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

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

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

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

热力学,MSE345,史密斯

量子力学,MSE350,约翰逊

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

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

4

8 回答 8

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
于 2013-09-05T02:21:57.860 回答
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']]
于 2013-09-05T02:22:26.873 回答
2

首先,您要做的是将split一长串类放入一个列表中,您可以使用str.split(','). 然后,您可以以三个为一组迭代此列表以形成成对的类数据。为此,您可以在此处使用itertools(特别是groupby文档

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
...
于 2013-09-05T02:13:49.273 回答
1

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

于 2013-09-05T02:20:11.333 回答
1

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

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

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

于 2013-09-05T02:22:13.267 回答
1
  1. len (classes) 为 1。“classes”是单个字符串。
  2. 因此,您不妨考虑 classes = ''' .... ''' (或 foo = classes [0] 的解决方案,以及对 foo.
  3. 当你这样做时,你需要担心跨越多行的字符串。''' 结构允许后面的 ''' 出现在多行之后。但是,如果前面和结尾都用括号括起来,则只有一行。没有括号,你就有了一长串多行。
  4. Gotcha - 班级或讲师的名称可能有逗号'''C、C#、C++ 和类似的语言、CS203、Kernighan、Richie 等。人,编辑,......'''
  5. 即使在 Gotcha 案例中,您可以使用课程 ID 作为“分隔符”,您也需要担心讲师与课程名称分开。呸
于 2013-09-05T03:06:08.337 回答
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')]
于 2013-09-05T02:44:48.277 回答
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')]
于 2013-09-05T03:29:51.580 回答