gpt4 book ai didi

python - 如何使用变量来切片 Python 列表?

转载 作者:行者123 更新时间:2023-11-28 21:13:49 24 4
gpt4 key购买 nike

我有一个包含六个项目的无害列表“mylist”。永远不会空着,永远不会有任何野兽般的元素。

mylist = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff']

我发现有两种方法可以为切片索引列表。对于这个问题,我将它们称为upper index (from 0 to 5)lower index (from -1 to -6)。这是一个快速图表(我发布了一张带颜色的照片,被另一个用户替换):

 <<<<|_________mylist[5:?:-1]_____________|

|___mylist[0:3:1]______|>>>>>>
?
(x) 0 1 2 3 4 5 (6)

aaa bbb ccc ddd eee fff

(-7) -6 -5 -4 -3 -2 -1 (y)
?
<<<<<<|___mylist[-1:-5:-1]___|

|______mylist[-6:?:1]________________|>>>>>

为了在列表的开头轻松切片,我可以像这样使用上部索引:

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

为了在结尾处轻松切片,我发现较低的索引很有用,例如:

>>> 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 转换为任何整数或其他数字。有办法吗?在 Pythonland 中可能是一种亵渎......

如果我找不到 x 的 secret 号码,那么我可能需要使用这个:

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(如 when use negative number to slice a string in Python, 0 is disabled?)和在线(如 https://docs.python.org/3/library/functions.html?highlight=slice#slice)上搜索并阅读了大量关于切片和变量的内容,我还搜索了电子书,如 Introducing Python 和 Learning Python。

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

欢迎您告诉我它不存在或无法按照我希望的方式完成。在后一种情况下,我还要求您提供尽可能接近我的要求的替代方案。

那些想要更多的人的背景:
这个问题更多的是关于“弄清楚切片”而不是关于使打印输出成为可能。我确实有解决方法,但很想了解更多。

最佳答案

简短的回答是:


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

>>> mylist = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff']
>>> mylist[2:None:-1] # first 3 items backwards (note off-by-one indexing)
['ccc', 'bbb', 'aaa']
>>> mylist[None:None:-1] # all items backwards
['fff', 'eee', 'ddd', 'ccc', 'bbb', 'aaa']

可以“整个事情”使用占位符,例如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']

关于python - 如何使用变量来切片 Python 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32376317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com