当你不能保证列表甚至是N长度时,将列表截断为N个索引的最pythonic方法是什么?像这样:
l = range(6)
if len(l) > 4:
l = l[:4]
我对python很新,我正在努力学习pythonicly。我想甚至截断列表的原因是因为我将以预期的长度枚举它,我只关心前4个元素。
答案 0 :(得分:11)
Python自动处理,优雅地超出范围的列表索引。
In [5]: k = range(2)
In [6]: k[:4]
Out[6]: [0, 1]
In [7]: k = range(6)
In [8]: k[:4]
Out[8]: [0, 1, 2, 3]
BTW,简并切片行为在The Python tutorial中解释。这是一个很好的起点,因为它很快就涵盖了很多概念。
答案 1 :(得分:5)
你在这里得到它:
lst = lst[:4]
无论列表中的项目数是多少,这都有效,即使它小于4.
如果你想让它总是有4个元素,用(如)零填充它或None
如果它太短,试试这个:
lst = (lst + [0] * 4)[:4]
如果您有这样的问题,通常可以尝试并查看会发生什么,或者在文档中查找。
顺便说一下,给变量list
命名是个坏主意;这会阻止您引用内置的list
类型。
答案 2 :(得分:4)
到目前为止,所有答案都没有截断列表。他们按照您的示例将名称分配给 new 列表,该列表包含旧列表中最多4个元素。要截断现有列表,请删除索引为4或更高的元素。这很简单:
del lst[4:]
继续你真正想做的事情,一种可能性是:
for i, value in enumerate(lst):
if i >= 4:
break
do_something_with(lst, i, value)
答案 3 :(得分:1)
我认为回答你问题的最pythonic解决方案是:
for x in l[:4]:
do_something_with(x)
优点: