例如,我希望将字符串转换为嵌套元组:
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)]
我将不胜感激任何帮助或建议。
答案 0 :(得分:1)
我不知道是否有更好的方法,但是我们开始:
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)]
答案 1 :(得分:0)
>>> 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
/ {{1}的作用,因此我们将学生彼此分开(我们称其为“他们”) } / C
与D
/ +
是什么意思?)在不同的容器中:
-
我们正在为每位学生使用正则表达式搜索“标记”数据
string.split('#')
可以读为
任何大写拉丁字母(可以在其后跟
[A-Z][+-]? \d+
或+
符号)和空格后跟数字
,并将其和学生的子字符串传递给-
函数。之后,我们将得到类似的内容:
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
/ +
的字母与数字分开,并在这对上进行迭代,将第二个坐标转换为-
。