python - 是否可以在列表和元素中使用相同的切片符号来获得相同的结果?

标签 python python-3.x list nested slice

我想获取列表最后一个索引中的元素,但有时最后一个索引是一个列表,在这种情况下我想要嵌套列表中的第一个元素。

#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/

相关文章:

python - pandas groupby agg 从一列中获取最大值并从另一列中获取值

python - Python 3 类创建的最佳实践

python - 循环直到玩家输入匹配+奇怪的错误(?)

python - 我在使用 pip 安装 pyinstaller 时遇到问题

python - 在打印语句中使用已随机选择的数字

python - 如果某个项目在列表中,我如何打印某些内容?

python - 如何将 DataFrame 的列和值转换为一个列表?

java - 接口(interface)方法参数数组与 util 列表

x 唯一字符的 Python 排列每次重复 y 次

python - 检查.getmembers 的顺序?