如何在for循环中从一个元素滚动到另一个元素?

2024-06-16 09:06:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要卷轴系统argv从第二个到倒数第二个论点。为什么不起作用?你知道吗

for arg in sys.argv[1: :len(sys.argv)-1] :
    print arg  

Tags: inforlen系统sysargprint卷轴
3条回答

sys.argv是一个list,因此您可以应用slicing以仅获取列表的某一部分,例如,如果您只想从元素2迭代到倒数第二个元素。 通常,如果lst是一个列表

lst[0]

是列表的第一个元素,并且

lst[-1]

是最后一个。 示例:

>>> x = [1,2,3,4,5,6]
>>> x[1:-1]
[2, 3, 4, 5]

使用切片,您的for循环应该如下所示

for arg in sys.argv[1:-1]:
    print(arg)

您的代码中有一个错误:不应该放两个冒号,而应该只放一个。其工作原理如下:

  • 为了排除nfirst元素,语法是[n:]

  • 要排除n最后的元素,不需要计算数组中的元素数。而是使用:[:-n]语法。

  • 如果要排除第一个x元素和最后一个y元素,可以将这两个元素组合起来:[x:y]

在您的示例中,要获取不带第一个和最后一个参数的数组,只需执行以下操作:

sys.argv[1:-1]

像这样:

for arg in sys.argv[1:-1]:
    print arg

问题是冒号太多,导致extended slice。你知道吗

因为[1::len(sys.argv)-1]中有多余的冒号(您的版本中冒号之间的空格是不必要的,这可能会让您感到困惑),您的意思是:

  • 给我索引1中的所有元素。。。你知道吗
  • …到最后(因为第一个和第二个冒号之间没有任何内容)。。。你知道吗
  • len(sys.argv)-1步幅。你知道吗

显然,如果你从序列的第二个元素开始,然后大步向前len(sequence) - 1,你就到了最后,什么都没有了。你知道吗

如果你去掉多余的冒号,你的代码就可以工作了。。。你知道吗

for arg in sys.argv[1:len(sys.argv)-1]:
    print arg  

。。。但是Python允许您使用negative indexes从要切片的序列的末尾开始计数,因此您可以用以下内容替换整个内容:

for arg in sys.argv[1:-1]:
    print arg  

相关问题 更多 >