我想获取列表最后一个索引中的元素,但有时最后一个索引是一个列表,在这种情况下我想要嵌套列表中的第一个元素。
#list in moment 1:
Lm1 = [1,2,3,4]
#list in moment 2:
Lm2 = [1,2,3,4,[1,2,3]]
我可以使用 if 来实现这一点。
#Option1:
def if_list(lastposition):
if isinstance(lastposition, list):
return list[0]
else:
return lastposition
element = if_list(Lm1[-1])
do whatever
或者,如果我想在两种情况下执行相同的操作,我可以像这样构建列表并使用相同的切片符号。它会给出我想要的元素。
#Option2:
Lm1 = [[1],[2],[3],[4]]
Lm2 = [[1],[2],[3],[4],[1,2,3]]
Lm1[-1][0]
Lm2[-1][0]
有没有一种方法可以使用类似于切片表示法的方法来做到这一点,该方法在两种情况下都有效(当索引是列表时和索引不是列表时)或一个简单的单行代码?
类似于:
#Lm1[-1:][:]...
问题是我不知道构建列表是否更节省时间 像选项 2 一样,使用相同的切片符号,或者像选项 1 那样每次都使用 if 原因。
我使用的是pythom 3.7,对旧版本不太了解。
最佳答案
我创建了一个测试台来使用 try- except 和 isinstance 进行比较,看看哪个更快,以下是结果。
选项2: 对我来说,将所有数据解析到列表似乎不是一种有效的方法。 :/
import time, statistics
Lm2 = [1,2,3,4,1,2,3]
t = []
for y in range(4):
s = time.time()
for i in range(100000):
if isinstance(Lm2[-1], list):
x = Lm2[-1][0]
else:
x = Lm2[-1]
t.append(time.time() - s)
print(statistics.mean(t))
Lm2 = [1,2,3,[4,1,2,3]]
t = []
for y in range(4):
s = time.time()
for i in range(100000):
try:
x = Lm2[-1][0]
except Exception:
x = Lm2[-1]
t.append(time.time() - s)
print(statistics.mean(t))
Lm2 = [1,2,3,[4,1,2,3]]
t = []
for y in range(4):
s = time.time()
for i in range(100000):
x = Lm2[-1][0] if type(Lm2[-1]) is list else Lm2[-1]
t.append(time.time() - s)
print(statistics.mean(t))
结果按顺序如下
# When the last element is a list
# 0.024208366870880127
# 0.011709034442901611
# 0.03266298770904541
# When the last element is an int
# 0.02896404266357422
# 0.015629112720489502
# 0.03452497720718384
根据我得到的数据,使用try-except总是会更快
关于python - 是否可以在列表和元素中使用相同的切片符号来获得相同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58923745/