Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List_Python 3.x_Syntax_Slice - Fatal编程技术网

如何使用变量对Python列表进行切片?

如何使用变量对Python列表进行切片?,python,list,python-3.x,syntax,slice,Python,List,Python 3.x,Syntax,Slice,我有一个无害的清单“我的清单”包括六项。永远不要空着,永远不要有任何讨厌的东西 mylist = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff'] 我发现有两种方法可以为列表编制索引,用于切片。对于这个问题,我将它们称为上指数(从0到5)和下指数(从-1到-6)。下面是一个快速图表(我发布了一张带有颜色的照片,被另一个用户替换): 为了便于在末尾附近进行切片,我发现较低的索引很有用,例如: >>> mylist[-1:-5:-1] ['ff

我有一个无害的清单“我的清单”包括六项。永远不要空着,永远不要有任何讨厌的东西

mylist = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff']
我发现有两种方法可以为列表编制索引,用于切片。对于这个问题,我将它们称为上指数(从0到5)下指数(从-1到-6)。下面是一个快速图表(我发布了一张带有颜色的照片,被另一个用户替换):

为了便于在末尾附近进行切片,我发现较低的索引很有用,例如:

>>> mylist[-1:-5:-1]
['fff', 'eee', 'ddd', 'ccc']
例如,我所说的“容易”是指不考虑代码与列表长度的关系

我了解到Python切片是“始终保留”(也称为“最多但不包括”)。在我的图表中,我将其显示为“箭头”,从切片的末尾指向前面的“下一项”(“切片的意义/方向上的“前面”)

对于我的用户,我需要显示列表中的前这么多项。(这些是递归搜索、求值和排序运行的结果。)由于此列表通常相当长,我会将其向后打印(在控制台中),以便在脚本结束时,屏幕上仍然可以看到最佳的
n
结果。因此,在本文中,我的步骤是
-1

我想使用变量,以满足不同用户的不同需求(以及不同的屏幕大小)对于调试和某些用户,我希望能够向后打印所有结果,即整个列表。我希望使用以下语法:

start = 5     # I only need to know "5" for debugging, normally I can use
              # any small number to show a few selected items of mylist

end = x       # this is my main question, see photo

mylist[start:end:-1]
我的问题是,我如何使用变量和索引的上部列表来编写图表中的第一个(最上面的)部分?或者换句话说,图表中
x
(和
y
)的数值是多少

我不想使用的半解决方案:

mylist[5::-1]       # no variable at all

mylist[5:None:-1]   # does not fit in my normal function for printing
我没有在任何简单的变量操作中使用
None
,它会给我带来如下错误:

    end = None - 20 
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
我还没有把
None
转换成任何整数或其他数字。有办法吗?可能是蟒蛇王国的亵渎

如果我找不到
x
的密码,那么我可能需要使用此密码:

mylist[-1:-7:-1]  # I want to use the upper index rather
但是这种方法需要检查
mystring
的长度

end = -1 * (len(mystring)+1)  # extra-explicit as an example
returns  -7

mystring[-1:end:-1]

returns  ['fff', 'eee', 'ddd', 'ccc', 'bbb', 'aaa']  # this is the output I want, just not the method
在问你之前我做了什么:
我编写了一个测试脚本,并尝试猜测
x
。我在Stack Overflow(如)和online(如)上搜索并阅读了大量关于切片和变量的内容,我还搜索了介绍Python和学习Python等电子书

请求:
请不要告诉我我想要的是错的。我可以对
mylist[0:6:1]
进行切片,尽管我的示例列表中没有索引的
6
项,对于
-7
也是如此。这就是为什么我有这样的预感,
x
y
也可能有数字,我可以在变量中使用它们

欢迎您告诉我,它不存在,或者不能以我希望的方式完成。在后一种情况下,我也要求你们提供尽可能接近我要求的替代方案

想要更多信息的人的背景:

这个问题更多的是关于“计算出切片”,而不是关于使打印输出成为可能。我确实有解决办法,但很想了解更多。

简短的回答是:没有


如果不想计算列表的长度,则必须使用
None
(尽管这是Python中的
O(1)
操作):


您可以使用占位符来表示“整件事”,例如
0

>>> end = 3
>>> mylist[end - 1 if end else None::-1]
['ccc', 'bbb', 'aaa']
>>> end = 0
>>> mylist[end - 1 if end else None::-1]
['fff', 'eee', 'ddd', 'ccc', 'bbb', 'aaa']

你也可以考虑两个步骤,即取你想要的切片然后反转它:

>>> mylist[:3][::-1]
['ccc', 'bbb', 'aaa']

只需设置一个默认值,如果用户更改了默认值(max),则更改变量

>>> mylist = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff']
>>> display_num = len(mylist)
>>> mylist[display_num-1::-1]
['fff', 'eee', 'ddd', 'ccc', 'bbb', 'aaa']
将display_num变量更改为要显示的结果数

>>> display_num = 4
>>> mylist[display_num-1::-1]
['ddd', 'ccc', 'bbb', 'aaa']
我认为你的选择是没有或名单的长度

。。。或者只是试着抓住

>>> display_num = None
>>> try:
>>>     mylist[display_num-1::-1]
>>> except TypeError:
>>>     mylist[::-1]

如果我没弄错你的问题,你希望我这样做吗

mylist[2:y:-1] == ['ccc', 'bbb', 'aaa']
其中y必须是整数

您要查找的y是
-len(mylist)-1
或更低的整数。如果需要常数,可以使用
-sys.maxsize
(因为列表不可能大于
maxsize


如果我们看一下CPython的源代码,我们可以看到这一点。为了完成您想要的操作,必须设置step=-1、start=2和slicelength=3

代码已经设置了start=2和step=-1。是否有y值可以导致切片长度=3?让我们看看

当步长为负时,计算切片长度的行为:

从这里,我们可以看到,为了使slicelength=(stop-start+1)/step+1=3,我们必须使stop=-1。然而:

如果(*停止<0)*停止+=长度;
如果(*停止<0)*停止=(*步骤<0)-1 : 0;

因此,如果我们提供负停止,它将增加
len(mylist)
。如果stop仍然为负值,则设置为-1,这是我们需要的值。

…什么?!你是说你想要序列中的第一个
n
项,顺序相反吗?为什么不
seq[:n][::-1]
(即,获取第一个
n
项目,然后将其反转-请注意,您可以省略一些数字,请参见示例)?你能把照片上的内容转换成真实的文字吗;前者对屏幕阅读器等用户毫无帮助。@jonrsharpe:谢谢,是的,前n项通常是,有时是所有项,总是相反。我不明白“省略一些数字”如何帮助我使用变量——我的问题不是输入更少的代码;请解释。@jonrsharpe:你有没有链接到一些语法帮助,可以让我的图表变成文本,保持对齐、颜色和箭头等。?怎么会呢
>>> display_num = 4
>>> mylist[display_num-1::-1]
['ddd', 'ccc', 'bbb', 'aaa']
>>> display_num = None
>>> try:
>>>     mylist[display_num-1::-1]
>>> except TypeError:
>>>     mylist[::-1]
mylist[2:y:-1] == ['ccc', 'bbb', 'aaa']
*slicelength = (*stop-*start+1)/(*step)+1;
if (*stop < 0) *stop += length;
if (*stop < 0) *stop = (*step < 0) ? -1 : 0;