LtP*_*ack 3 python function slice
我有一个像这样的功能
def f():
...
...
return [list1, list2]
Run Code Online (Sandbox Code Playgroud)
这将返回一个列表列表
[[list1.item1,list1.item2,...],[list2.item1,list2.item2,...]]
Run Code Online (Sandbox Code Playgroud)
现在我做以下事情:
for i in range(0,2):print f()[i][0:10]
Run Code Online (Sandbox Code Playgroud)
它工作并打印切片列表
但如果我这样做
print f()[0:2][0:10]
Run Code Online (Sandbox Code Playgroud)
然后它打印忽略[0:10]切片的列表.
有没有办法让第二种形式起作用,或者每次都必须循环以获得所需的结果?
Ign*_*ams 10
第二个切片切片从第一个切片返回的序列,所以是的,你将不得不以某种方式循环以便切片:
[x[0:10] for x in f()[0:2]]
Run Code Online (Sandbox Code Playgroud)
这两个表现不同的原因是因为这样的f()[0:2][0:10]
工作:
f()
为您提供列表清单.[0:2]
为您提供一个列表,其中包含列表列表中的前两个元素.由于列表列表中的元素是列表,因此这也是列表列表.[0:10]
为您提供一个列表,其中包含步骤2中生成的列表列表中的前十个元素.换句话说,f()[0:2][0:10]
从列表列表开始,然后获取该列表列表的子列表(也是列表列表),然后获取第二列表列表的子列表(也是列表列表) .
相反,f()[i]
实际上i
从列表列表中提取第-th个元素,这只是一个简单的列表(不是列表列表).然后,当您申请时[0:10]
,您将其应用于您获得的简单列表,f()[i]
而不是列表列表.
最重要的是,任何提供所需行为的解决方案都必须像[i]
某些点一样访问单个数组元素,而不是只使用像[i:j]
.
归档时间: |
|
查看次数: |
5368 次 |
最近记录: |