我的代码有什么问题:
l = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', 'h']
for i in l:
for j in i:
print(j)`
输出结果为:
a
bb
['ccc', 'ddd']
ee
ff
g
h.
但我想要这个输出:
a
bb
ccc ddd
ee
ff
g
h.
需要做哪些更改?
我认为这个规则是"逐行打印列表l
或者它内部嵌套的列表,除非嵌套的列表中不包含子列表,在这种情况下,将所有项用空格隔开一行打印出来。"
如果我的理解正确,那么以下代码应该可以执行:
l = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', 'h']
def print_list(lst):
if not any(isinstance(x, list) for x in lst):
# print list of strings on one line
print(*lst)
return
# contains sublists; print or process items one by one
for x in lst:
if isinstance(x, list):
print_list(x) # process sub-list
else:
print(x)
print_list(l)
def find_value(list_):
for i in list_:
if isinstance(i,list):
for j in find_value(i):
yield j
else:
yield i
l = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', 'h']
for i in find_value(l):
print(i)
请提供更多关于您想要的内容的信息。
正如评论中@Barmar所提到的,j
可以是列表。
您可以使用isinstance
检查变量是否为特定类型。
l = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', 'h']
for i in l:
for j in i:
if isinstance(j,list):
print(*j)
else:
print(j)
l = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', 'h']
from functools import reduce
for first in l:
for sec in first:
if type(sec) == type(list()):
iter = str(reduce(lambda x, y: str(x)+' '+str(y), sec))
print(iter)
else:
print(sec)
L = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', 'h']
k = 0
for i in L:
for j in i:
if k==2:
for r in j:
print(r)
k =k+1
else:
print(j)
k = k+1
j
是否为列表。如果是,使用print(*j, sep=' ')
而不是print(j)
。 - Barmarccc
和ddd
,而其他所有内容都单独成行呢? - Matthias Frippccc
和ddd
应该在同一行,而其它的内容则应该单独成行,那么你就是要求计算机(和我们)读你的心思,这是不现实的。你如何判断哪些项目应该放在同一行,哪些应该单独成行? - Matthias Fripp