python将复杂列表转换为字符串

2024-05-16 17:59:41 发布

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

我有一个复杂的列表,如下所示:

[[['MARIA DUPONT',
   ' infos : ',
   [' age = 28',
    ' yeux = bleus',
    ' sexe = femme']],
  [' + ']],
 [['PATRICK MARTIN',
   ' infos : ',
   [' age = 53',
    ' yeux = marrons',
    ' sexe = homme']],
  [' + ']],
 [['JULIE SMITH',
   ' infos : ',
   [' age = 17',
    'yeux = verts',
    'sexe = femme']],
  [' fin ']]]

我试图把它转换成一个字符串。最后,我想打印以下内容:

MARIA DUPONT,
 infos :
 age = 28 
 yeux = bleus 
 sexe = femme 

 + 

PATRICK MARTIN
 infos :
 age = 53
 yeux = marrons
 sexe = homme

 + 

JULIE SMITH
 infos :
 age = 17
 yeux = verts
 sexe = femme

 fin

我的真实数据更为复杂,我将列表分为5级。 因此,我正在寻找一种方法来解决我解释的问题,以便能够调整它并将其应用到我的真实数据中

我正在尝试 ''.join(list)''.join(x for x in list)

但在这两种情况下,我都有错误TypeError: list indices must be integers or slices, not list

我尝试过其他方法,但现在我很困惑,我没有找到一个好的解决方案来实现我的目标

任何帮助都将不胜感激,并提前表示感谢。(很抱歉我的英语不好!)


Tags: 列表agelistmartininfospatrickmariajulie
3条回答

您可以使用str.join对列表进行一次遍历:

data = [[['MARIA DUPONT', ' infos : ', [' age = 28', ' yeux = bleus', ' sexe = femme']], [' + ']], [['PATRICK MARTIN', ' infos : ', [' age = 53', ' yeux = marrons', ' sexe = homme']], [' + ']], [['JULIE SMITH', ' infos : ', [' age = 17', 'yeux = verts', 'sexe = femme']], [' fin ']]]
r = '\n'.join('\n'.join([a, b, *c, f'\n{k}\n']) for [a, b, c], [k] in data)

输出:

MARIA DUPONT
 infos : 
 age = 28
 yeux = bleus
 sexe = femme

 + 

PATRICK MARTIN
 infos : 
 age = 53
 yeux = marrons
 sexe = homme

 + 

JULIE SMITH
 infos : 
 age = 17
 yeux = verts
 sexe = femme

 fin 

如果列表是任意嵌套的,则可以对生成器使用递归:

def flatten(d):
  if isinstance(d, str):
     yield d
  else:
     yield from [i for b in d for i in flatten(b)]

print('\n'.join(flatten(data)))

.join()无法处理列表中的列表。我可以提供一个基于递归的解决方案

def list_to_str(_list):
    result = ""
    if isinstance(_list, list):   
        for l in _list:
            result += list_to_str(l)
    else:
        result += _list
    return result

result_string = list_to_str(your_list)

print(result_string)

我无法判断是否有一个列表具有不同级别的列表,但如果是这样,您可能需要一个条件来查看列表是否进一步并递归地迭代列表

def convert_list(dataset):
    result = ''
    for element in dataset:
        if isinstance(element, list):
            result += convert_list(element)
        else:
            result += str(element)
    return result

这不会打印所需的换行符,但会以字符串形式返回列表

相关问题 更多 >