python列表嵌套元组拆分,将包含整数和字符串的列表转换为嵌套元组Python

本问题已经有最佳答案,请猛点这里访问。

我希望将字符串转换为嵌套元组,例如:

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:你的密码在哪里?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值