如果否定列表索引从列表的末尾开始,则假设我们拥有:
l = [1,2,3,4,5]
和l[0:3]
和l[:3]
返回相同的值,而l[-3:0]
返回一个空列表,而l[-3:]
返回[3,4,5]
不允许list[-x:0]
返回列表的背后逻辑是什么?
答案 0 :(得分:2)
l[-3:0]
尝试从3到0的范围进行切分-与l[2:0]
..相同,因为第一个值>第二个值没有切分。
l[-3:]
可以读作l[-3:len(l)]
-因此l[2:5]
会返回切片。
您需要l[-3:0:-1]
才能正常工作-但这很令人讨厌,我试图避免切片。 (print( [1,2,3,4,5][-3:0:-1]
-> [3, 2]
),因为它还会将切片“方向”反转为向后而不是向前
l[-3:]
从后面的3片切到结尾。
答案 1 :(得分:1)
Python中slice的完整符号如下:
s[start:end:step]
话虽如此,它根据documentation为值提供了有用的默认值:
切片索引具有有用的默认值;省略的第一索引默认为 零,省略的第二个索引默认为字符串的大小 切成薄片。
因此,当您执行以下操作时:
s[1:]
此操作已完成:
s[1:len(s)]
请注意,在两种情况下, step 均默认为1
。在大多数语言中,例如,当您想访问列表的最后一个元素时,您可以执行以下操作:
s[len(s) - 1]
Python负索引是在该表示法上的语法糖的一种,因此:
l[-1] = l[len(l) - 1]
l[-2] = l[len(l) - 2]
...
然后在您这样做时:
l[-3:]
这完成了:
l[len(l)-3:len(l)]
因此,应该使用0
作为最后的索引,而不是len(l)
:
l = [1, 2, 3, 4, 5]
print(l[-3:len(l)])
输出
[3, 4, 5]
请注意,l[-3:0]
返回空列表是因为len(l) - 3 > 0
,即第一个索引大于第二个索引,并且 step 为1
。
进一步
答案 2 :(得分:0)
前面的 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/jesta_bottom_navigation"
style="@style/Widget.Jesta.BottomNavigationView"
android:layout_width="match_parent"
android:layout_height="@dimen/bottom_bar"
android:layout_gravity="bottom"
app:itemIconSize="30dp"
app:itemIconTint="@drawable/jesta_bottom_navigation_colors"
app:labelVisibilityMode="unlabeled"
app:menu="@menu/bottom_nav_drawer_menu" />
</FrameLayout>
起作用了,但是最后……行不通了,与此相同:
0
因为python最后想的是零...
所以这实际上等同于:
>>> l=[1,2,3,4,5]
>>> l[2:0]
[]
>>>
因为第一个元素之前当然没有东西,如果有的话,那个东西就不会是第一个元素,而是第二个。
答案 3 :(得分:0)
负索引从列表的末尾开始操作。 假设您要获取最后3件商品,可以这样做:
# Reversing and restoring the order
my_list = [1,2,3,4,5,6]
print(reversed(reversed(my_list)[:3]))
# Subtracting from the size
size = len(my_list)
print(my_list[size-3:])
但是您可以键入
my_list[-3:]
用言语表述的是让我从列表末尾的第三项开始获得列表的一部分
所以您必须知道您的要求。
# Slice from the x'th element at the end till the end of the list
my_list[-x:]
# Slice from the x'th element at the end till the y'th element at the end of the list
my_list[-x:-y]
# Slice from the x'th element at the end till the y'th element from the start of the list.
# Only valid if len(my_list) - y < x and y > 0
my_list[-x:y]