如何将元组转换为具有浮点值和字符串值的列表

2024-05-26 17:44:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元组列表,如下所示:

tuple_list =   [(['MATH120'], 3.665, 0.4737615433949868), (['GER'], 3.4566666666666666, 0.3967146329542181), (['FREE'], 3.415636363636364, 0.450256863026264), ([''], 0.041607963246554365, 0.38832820111766464)]

我想做的是将其转换为:

result = [['MATH120', 3.665, 0.4737615433949868],['GER', 3.4566666666666666, 0.3967146329542181],['FREE', 3.415636363636364, 0.450256863026264]]

这意味着我想将其转换为一个包含3对的列表,如果列表中只有空的元素,则删除整个元组,并删除元组中可能存在的空字符串,例如,如果它是这样的:

tuple_list = [(['MATH120',''], 3.665, 0.4737615433949868), (['GER','',''], 3.4566666666666666, 0.3967146329542181), (['FREE'], 3.415636363636364, 0.450256863026264), ([''], 0.041607963246554365, 0.38832820111766464)]

我希望它与前面一样:

result = [['MATH120', 3.665, 0.4737615433949868],['GER', 3.4566666666666666, 0.3967146329542181],['FREE', 3.415636363636364, 0.450256863026264]]

我试着这样做是为了把它们放在列表中:

result= [list(map(list, l)) for l in tuple_list]

但由于浮点值的原因,我一直在出错:

TypeError: 'float' object is not iterable

Tags: 字符串infree元素map列表for原因
3条回答
result=  [ [e for e in l if e] + list(t) for l, *t in tuple_list if any(l) ]

[e in t[0] if e]从子列表中删除空字符串;然后附加元组的其余元素;但是如果列表中没有非空元素(any(t[0])False),则跳过此元组

如果您的数据总是这样规则,并且您只需要内部列表中的第一个元素,那么只需:

>>> [[x, y, z] for [x, *_], y, z in data]
[['MATH120', 3.665, 0.4737615433949868], ['GER', 3.4566666666666666, 0.3967146329542181], ['FREE', 3.415636363636364, 0.450256863026264], ['', 0.041607963246554365, 0.38832820111766464]]

最终编辑:

既然您已经澄清了它们是空字符串,我们可以做一些更好的事情:

>>> [ [*filter(None, lst), a, b] for lst, a, b in data if any(lst) ]
[['MATH120', 3.665, 0.4737615433949868], ['GER', 3.4566666666666666, 0.3967146329542181], ['FREE', 3.415636363636364, 0.450256863026264]]
>>>

我认为这是一个很好的陈述

出现此错误的原因是,在调用map(list, l)时,l引用了一个内部元组(例如(['MATH120'], 3.665, 0.4737615433949868)),这些浮点不能直接转换为列表。我建议您执行以下操作:

for listIndex in range(tuple_list):
    tuple_list[listIndex] = list(tuple_list[listIndex]) # Converts inner tuples to list
    for element in inner_tuple:
        if isinstance(element, list): # checks if element inside tuple is list
            #do logic on list that you need

相关问题 更多 >

    热门问题