我是Python的新手,来到这里是最后的选择。我花了几个小时仔细阅读我的笔记和互联网,试图弄清楚如何做到这一点,但无济于事。
我有一个类似于这个列表的列表:
classes = ['''Thermodynamics, MSE345, Smith, Quantum Mechanics, MSE350, Johnson, Electrical Engineering, ECE322, Roberts, etc. etc.''']
我需要在一行中垂直打印列表,课程代码和教授,如下所示:
热力学,MSE345,史密斯
量子力学,MSE350,约翰逊
由于列表中有逗号分隔类,代码和教授,我无法弄清楚如何在一行中将所有这些内容打印在一起。
当我输入代码时 - > classes.split(',')
,它在其自己的行上打印了每个逗号分隔的短语,并且它们包含在''中。我需要摆脱引号和括号。如果你能帮我解决这个问题,我将非常感激。不寻找有人为我做功课,如果你能解释我需要使用的命令,我可以(希望)自己弄清楚其余部分。这是我编程的第一周,我觉得这有点过头了!
答案 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
(具体为groupby
)documentation 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)
答案 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')]