Python列表到字符串的转换

时间:2020-02-23 14:42:56  来源:igfitidea点击:

有时我们想将列表转换为字符串,以便我们可以打印或者记录该列表以进行调试。
在本教程中,我们将学习如何在Python程序中将列表转换为字符串。

Python列表到字符串的转换

如果列表包含字符串int浮点数,则在我们打印列表时将打印其元素值。

l1 = [1, 2, 3]
print(l1)

l1 = ['A', 'B', 'C']
print(l1)

l1 = ['A', 'B', 'C', 1, 2, 3.5]
print(l1)

输出:

[1, 2, 3]
['A', 'B', 'C']
['A', 'B', 'C', 1, 2, 3.5]

如果您不想在输出中使用括号,则可以使用string strip()函数或者切片将其删除。

print(str(l1).strip('[]'))
print(str(l1)[1:-1])

输出:

'A', 'B', 'C', 1, 2, 3.5
'A', 'B', 'C', 1, 2, 3.5

Python对象列表到字符串的转换

让我们看看列表包含自定义对象时会发生什么。

class Data:
  id = 0

  def __init__(self, i):
      id = i

l1 = [Data(10), Data(20)]
print(l1)

输出:

[<__main__.Data object at 0x10f3dd320>, <__main__.Data object at 0x10f3dd2e8>]

该信息无用,因为它不包含有关Data对象的任何信息。

当我们打印列表时,它尝试调用其元素__repr __()函数。
由于我们的对象没有定义自己的repr()函数,因此将调用其超类对象repr()来打印此信息。

让我们为Data类定义__repr __()函数,如下所示:

def __repr__(self):
      return f'Data[{self.id}]'

现在,上述打印语句的输出将是:

[Data[0], Data[0]]

有时,一个对象仅定义__str __()函数,而没有定义__repr __()函数。
在这种情况下,我们可以通过在其元素上调用str()函数将列表转换为字符串。

这可以通过使用带有迭代器作为参数的字符串join()函数或者通过使用map()函数来完成。

我们将Data类的__str __()函数定义为:

def __str__(self):
      return f'D[{self.id}]'

现在我们可以获取列表元素的字符串表示形式,并使用以下代码进行打印:

print(', '.join(map(str, l1)))
print(', '.join(str(e) for e in l1))

输出:

D[0], D[0]
D[0], D[0]

请注意,如果未为对象定义__str __()函数,则str()函数将回退到调用__repr __()函数。
在这种情况下,__repr __()应该返回字符串对象。

如果我们从Data类中删除__str __()函数,则以上join()片段输出将为:

Data[0], Data[0]
Data[0], Data[0]

使用join()函数时,我们可以指定自己的定界符。

print('|'.join(map(str, l1)))
print('#'.join(str(e) for e in l1))

输出:

D[0]|D[0]
D[0]#D[0]