Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表范围细化_Python - Fatal编程技术网

Python 列表范围细化

Python 列表范围细化,python,Python,我一直在使用a[0:2]格式来表示范围,但是如果我使用a=range(0,5)我会得到a[0,1,2,3,4]但是如果我使用a[0:-1]我会得到a[0,1,2,3] 我知道如果我使用a[0::我会得到完整的范围,但是如果我想让变量定义范围的末尾(例如:c=-1thena[0,c]),如果不使用条件语句(例如:如果c=-1:c=None),我就无法得到完整的范围 是否有一些好的格式,我可以使用它来访问整个范围,同时使用变量作为限制?还是我需要一个条件语句 谢谢 编辑:我似乎有两个选项可用,我可以

我一直在使用
a[0:2]
格式来表示范围,但是如果我使用
a=range(0,5)
我会得到
a[0,1,2,3,4]
但是如果我使用
a[0:-1]
我会得到
a[0,1,2,3]

我知道如果我使用
a[0::
我会得到完整的范围,但是如果我想让变量定义范围的末尾(例如:
c=-1
then
a[0,c]
),如果不使用条件语句(例如:
如果c=-1:c=None
),我就无法得到完整的范围

是否有一些好的格式,我可以使用它来访问整个范围,同时使用变量作为限制?还是我需要一个条件语句

谢谢


编辑:我似乎有两个选项可用,我可以有条件地将变量设置为
None
,或者设置变量,使最后一个术语设置为
len(a)
。我还不能100%确定我将采用哪种方式,但感谢大家的回答。

您可以使用三元运算符:

a[0:c if c>0 else None]
但那太难看了


我认为更好的问题是“为什么要使用-1来获得完整的切片?”。Python已经使用
-1
来访问(但不包括)最后一个元素。改变这种行为只会给熟悉这种语言的人带来意想不到的结果。只需记录这样一个事实,即如果此函数的用户想要获得完整的切片,他们应该传递
None

只需将
None
分配给
c

c = None
a[2:c]
它可以按你的意愿工作。实际上,这就是创建切片(而不是范围)的方式

它们实际上是普通的Python对象。您甚至可以在
[]
中使用它们

a = [0, 1, 2, 3]
s = slice(2, None)
a[s]  # equal to a[2:]

您可以使用
切片

endLimit = int(raw_input("what is the limit?"))
if endLimit == 0:
    endLimit = None
range(5)[slice(0,endLimit)]

slice实际上是表示
[start:end:jumps]
范围(5)[start:end:jumps]
a[0:][/code>只是
a[0:len(a)]

因此

提供完整的范围。

编辑: 现在我已经完全了解OP想要的是什么,这将是一种方法:

a[0:c if c != 0 else len(a)]
它使用三元,或者如果你真的不想使用条件,我很确定这正是你想要的,并且给你一个c=0的完整切片:

a[0:((c-1) % len(a)) + 1]
----------------------旧职位---------------------------

嗯,我可能错过了一些东西,但你可以任意高。如果您这样做:

a = range(5)
a[0:200]
你会得到:

[0, 1, 2, 3, 4]

因此,如果c只是在增长或做它自己的事情,那么每次c都会给出完整的范围≥ len(a)。

我很确定OP已经知道了这一点(“如果不使用条件语句,我无法获得完整的范围…”)这是我的方向,但为了将c设置为无,我需要使用条件语句,而且似乎应该有一种更干净的方法。如果没有,那么就没有了。谢谢。不要使用
-1
作为哨兵值。来自类C语言的诱惑很强,但要抵制。为什么不呢?否则我怎么能抓住最后一个学期呢?仅将其用作范围终止符是不是也可以使用此格式
a[-1]
?怎么做?@msw你能告诉我获取哨兵值的正确方法吗?谢谢。看起来您好像在使用-1作为“不可能发生”的值,如C中的EOF或NULL。Python有一个名为
None
的非a值,它也意外地适用于您的切片。从样式/设计的角度来看
如果x为无:
比你可能选择的任何其他哨兵值都更具python风格。既然我说的是样式,那就是圣经。我使用-1格式是因为它保持数字,我只需将我想要的术语数从末尾乘以-1就可以得到该术语(适用于单个选择
a[-1]
,但不适用于范围
a[0:-1]
。我只是觉得必须有一种内置的方法来实现这一点,这就是我为什么要问的原因。但看起来我应该只使用一个条件语句,而使用
None
。这很有趣。我想我会得到一个超出范围的错误,但它是有效的。切片表示法中的end参数是非包容性的,所以它基本上返回一个对于从索引0到索引(len(a)-1)的所有元素,
范围
只是一个例子。我的列表与外部数据的长度是任意的。我需要能够从列表的末尾切掉已知数量的点。你的方法不容易做到这一点。啊,明白了。所以你需要能够说[0:-7]获取除最后7项之外的所有数据。您是否希望[0:0]返回一个空列表,或者在您的情况下这是毫无意义的?我看不到任何
a[0:0]
的应用程序,但我希望能够轻松获取包括最后一项在内的全部数据(如果我愿意的话).从我收集的资料来看,有两种方法可以做到这一点(见我的编辑)。是的,明白了。好吧,我编辑了我的。两种工作方法,一种使用三元,一种使用模。它们都应该按照您希望的方式工作,并在c=0上给您一个完整的切片。(您不希望在c=-1上有完整的切片,因为这具有实际的非空列表含义。)
[0, 1, 2, 3, 4]