Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将包含整数和字符串的列表转换为嵌套元组,Python_Python 3.x_Tuples - Fatal编程技术网

Python 3.x 将包含整数和字符串的列表转换为嵌套元组,Python

Python 3.x 将包含整数和字符串的列表转换为嵌套元组,Python,python-3.x,tuples,Python 3.x,Tuples,我希望将字符串转换为嵌套元组,例如: 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”的原因是,我只需要获取值,不管是

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

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)]

我将非常感谢任何帮助或建议

我不知道是否有更好的方法,但我们走吧:

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)]
使用

逐步解释
  • 我们将学生(我们这样称呼他们)彼此分开,因为我们需要将他们的“标记”(或者这些
    A
    /
    B
    /
    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
    方法将带有
    +
    /
    -
    的字母从数字中分离出来,并迭代将第二个坐标转换为
    int
  • 进一步阅读

    • A/B/C/D
      +
      /
      -
      是什么意思?后面是一个数字?是的+/-符号是字母分数,我需要写一个函数,它接受一个奇怪的字符串,并确定列表中是否有学生进入院长名单。到目前为止,我有大约64行代码,函数之间有适当的间距,但它不起作用。我的意思是,我使用一个helper函数来确定他们的gpa,它以一个元组作为参数。当我手动输入字符串中的元组时,它给出了正确的答案,但是当我尝试在程序中返回包含字符串函数的元组时,我得到了一个错误。如果您看到我的代码,我想您会理解我的意思。我知道我应该做什么,但我认为我遗漏了一些非常琐碎的事情。如果你能帮我的话,我会非常感激。我之前有一个任务,我必须编写一个函数,它包含一个元组列表,并使用字典来确定总体gpa。我目前正在做的这个作业是写一个函数,调用上一个函数,看看学生是否进入院长名单。我只是想我可以把参数转换成一个元组列表,helper函数接受这些元组,它将返回正确的值,但它不起作用,而且越来越令人沮丧。@SeungsooIm:你的代码在哪里?
      >>> [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']]