本问题已经有最佳答案,请猛点这里访问。
我希望将字符串转换为嵌套元组,例如:
string = 'Jane A 3 B- 3 F 1#Bob C+ 2 D+ 3#Chris C 4 C 3 C- 2'
如您所见,字符串不正常,用符号和空格代替逗号。符号表示名称的数量,我必须计算每个名称后面的一些数据。所以我用string.split('#')创建了3个独立的字符串,从中,我使用了for循环在第一次迭代中得到它:
['A', 3, 'B-', 3, 'F', 1]
号
列表中缺少"jane"的原因是,我只需要获取值(无论是字符串还是整数),并从中生成嵌套的元组。因此,我希望将此列表转换为一个嵌套的元组,如下所示:
[('A', 3), ('B-', 3), ('F', 1)]
我将非常感谢任何帮助或建议。
+和-的A/B/C/D是什么意思?后面还有一个数字?
我不知道有没有更好的方法,但现在我们开始:
input = ['A', 3, 'B-', 3, 'F', 1]
l1 = input[::2] # get even
l2 = input[1::2] # get odd
tuples = list(zip(l1,l2)) # zip them together
# yes it could be wrote `tuples = list(zip(input[::2],input[1::2]))`
print (tuples)
产量
[('A', 3), ('B-', 3), ('F', 1)]
号
网上试试!
使用正则表达式
>>> import re
>>> [[(mark, int(count))
for mark, count in map(str.split,
re.findall(r'[A-Z][+-]? \d+', student_data))]
for student_data in string.split('#')]
[[('A', 3), ('B-', 3), ('F', 1)],
[('C+', 2), ('D+', 3)],
[('C', 4), ('C', 3), ('C-', 2)]]
逐步解释
我们把学生(我们叫他们)分开,因为我们需要存储他们的"标记"(或者这些A/B/C/D和+/-是什么意思?)在不同的容器中:
string.split('#')
。
对于每个学生,我们使用正则表达式搜索"标记"数据
[A-Z][+-]? \d+
读起来像
any capital Latin letter (which optionally may be followed by + or - sign) and a whitespace followed by digits
号
把它和学生的子字符串传递给re.findall函数。在那之后,我们会有如下的东西:
>>> [re.findall(r'[A-Z][+-]? \d', student_data) for student_data in string.split('#')]
[['A 3', 'B- 3', 'F 1'], ['C+ 2', 'D+ 3'], ['C 4', 'C 3', 'C- 2']]
。
最后,我们可以使用str.split方法将带有+/-的字母从数字中分离出来,并在这个对上迭代,将第二个坐标转换为int。
进一步阅读
map内置文档。
re模块文档。
是的,正负号是字母等级,我需要写一个函数,它采用一个奇怪的字符串,并确定列表中是否有学生成为院长的列表。到目前为止,我有大约64行代码,函数之间有适当的间隔,但它不起作用。我的意思是,我使用一个助手函数来确定它们的gpa,它以一个元组作为参数。当我手动输入字符串中的元组时,它给出了正确的答案,但是当我尝试在包含字符串函数的程序中返回它时,我得到了一个错误。
我想如果你看到我的代码,你会明白我的意思。我知道我该怎么做,但我觉得我错过了一些微不足道的事情。如果你能帮助我,我会非常感激的。
我以前有一个任务,我必须编写一个函数,它获取元组列表,并使用字典来确定总体GPA。我目前正在做的这个任务是写一个调用前一个函数的函数,看一个学生是否在院长名单上。我只是想把这个参数变成一个帮助函数接受的元组列表,它将返回正确的值,但是它不起作用,而且会让人沮丧。
@Seungsooim:你的密码在哪里?