任意层列表的内容转化为一个字符串(PyQt的列表无法打印问题)
1 功能背景
在很多python编辑器中,print()函数可以打印很多内部数据结构,比如列表[…],字符串“string”,数字123,集合、映射{…},元组(…),dataframe,numpy.array()等等,其中列表的打印最为常见。但是在有些情况下,一些输出类型的函数只能接受str对象进行输出,最典型的例子就是PyQt中的.settext()类型的函数,因此需要将list的内容转化为一个字符串进行输出。
问题:
列表1:[“11326fweg”, “affse6546a”, “aoffijaojjaj哈哈哈”]
列表2:[“example1affffgg”, [“awggeag”, “faewgerhj”, “age4g”], [“faef”, “awfwe”], “awefweeasf”]
列表3:[[[[[“egfergrgg”, “aewfhjty548s”]], [“awegewg”, “aseefg5496”]]]]
将上述任意列表里的内容都可以转化为一个字符串,中间用\n隔开
2 程序实现
# 输入想要转化的列表
def list_2_string(unknown_level_list):
res = ""
for eve in unknown_level_list:
if type(eve) == type("string"):
res += eve + "\n"
# 再加elif可以实现判断其他数据结构,供扩展,所以没用else
elif type(eve) == type([]):
res += list_2_string(eve) # 递归调用
return res
# 返回一个字符串的结果
上述的程序已经经过测试,可以顺利完成预期的功能。
3 实验结果
传入列表1的内容,输出结果:
"11326fweg\naffse6546a\naoffijaojjaj哈哈哈"
传入列表2的内容,输出结果:
"example1affffgg\nawggeag\nfaewgerhj\nage4g\nfaef\nawfwe\nawefweeasf"
传入列表3的内容,输出结果:
"egfergrgg\naewfhjty548s\nawegewg\naseefg5496"
通过将任意层深度的列表转化为一个字符串,可以在很多不能打印列表的地方实现列表内容的转化输出,比如PyQt4中的settext方法等。