동일한 결과를 얻기 위해 목록과 요소 모두에서 동일한 슬라이스 표기법을 사용할 수 있습니까?

티아고 루이스

목록의 마지막 색인에있는 요소를 가져오고 싶지만 마지막 색인이 목록 인 경우도 있습니다.이 경우 중첩 된 목록의 첫 번째 요소를 원합니다.

#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:][:]...

문제는 Option2와 같은 목록을 작성하고 동일한 슬라이스 표기법을 사용하거나 Option1과 같이 매번 if 원인을 사용하는 것이 더 많은 시간이 효율적인지 알 수 없다는 것입니다.

나는 pythom 3.7을 사용하고 있는데, 이전 버전에 대해 잘 모릅니다.

마르 실리 누 자키

나는 try-except 및 isinstance를 사용하여 비교하기 위해 테스트 벤치를 만들었으며 어떤 것이 더 빠른지 확인하고 여기에 결과가 있습니다.

Option2 : 모든 데이터를 목록으로 구문 분석하는 것은 나에게 효율적인 방법처럼 보이지 않습니다. : /

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를 사용하면 항상 더 빠를 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관