목록의 마지막 색인에있는 요소를 가져오고 싶지만 마지막 색인이 목록 인 경우도 있습니다.이 경우 중첩 된 목록의 첫 번째 요소를 원합니다.
#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] 삭제
몇 마디 만하겠습니다