ron*_*nie 3 python list python-2.7
我有一份清单l = [['a','b', 'c'], 'd','e', ['f', 'g']].列表元素并不总是必须是字母表.
现在,我使用了以下代码:
>>> index =1
>>> for i in l:
... if isinstance(i, list):
... for j in i :
... print index, j
... index = index + 1
... else:
... print index, i
... index = index + 1
...
1 a
2 b
3 c
4 d
5 e
6 f
7 g
Run Code Online (Sandbox Code Playgroud)
您可以看到我打印出结果的格式.
另一个例子:
l = [['aaa','bbb','xxx'], 'ddd']
Output =
1 aaa
2 bbb
3 xxx
4 ddd
Run Code Online (Sandbox Code Playgroud)
我的问题是有更好的方法来做这个或built-inpython中的任何功能.
PS:列表只有1级嵌套.所以,[ [a, [b,c] ], d, e ]不是一种可能性.
你可以做到这一点很容易itertools.chain.from_iterable()和enumerate():
>>> import itertools
>>> l = [['a','b', 'c'], 'd','e', ['f', 'g']]
>>> for index, value in enumerate(itertools.chain.from_iterable(l), 1):
... print(index, value)
...
1 a
2 b
3 c
4 d
5 e
6 f
7 g
Run Code Online (Sandbox Code Playgroud)
编辑:正如mgilson所指出的,这对于多字符字符串作为顶层元素并不适用.我认为最好的解决方案就是在他的答案中使用生成器,但是,我认为字符串是特殊情况,而不是列表,所以我会颠倒逻辑:
def flatten(seq):
for item in seq:
if not isinstance(item, str): #Use `basestring` in 2.x
yield from item
#For Python <3.3
#for subitem in item:
# yield subitem
else:
yield item
Run Code Online (Sandbox Code Playgroud)
我会创建一个生成器来展平列表:
def flatten(lst):
for i in lst:
if(isinstance(i,list)):
for x in i:
yield x
else:
yield x
Run Code Online (Sandbox Code Playgroud)
然后我会enumerate用于打印:
for idx,item in enumerate(flatten(lst),1):
print idx,item
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
355 次 |
| 最近记录: |