더 우아한 방법이 있나요?Python : 목록에서 수레를 추출하는 우아한 방법?
나는 형태의 "이중"목록을 가지고 : 나는 형식, 개별 부동 소수점 숫자를 추출하려는
rlist = [([-0.5753647], [1.3716470]), ([-0.57536478], [0.75418190]), ([-1.37632438], [0.57068748])]
. 순간
내가 사용하고 있습니다 : 예를 들어
first_number = round(float(str(rlist[0][0]).strip('[]')),4)
, 첫 번째 번호를 얻을 수 있습니다. 이것은 다소 추한 것입니다. 파이썬에서 좀 더 간결한 방법이 있나요?
DN은
1. 랜덤 임포트 무작위로부터 이것을 체크한다; 범위 (4)에서 z의 경우 chain (* chain (* chain (* [[범위 (2)의 x에 대해 [[[random()] 범위에 포함)]))' 더 깊은 중첩을 시도하면 잘 작동하는 것을 볼 수 있습니다. 2. 문자열로 변환해도 문제가 해결되지 않으며 @dcnicholls와는 다른 결과가 나옵니다. fp 표현이 실제로 문제가된다면'decimal.Decimal'을 사용할 수 있습니다. 3. isinstance를 사용하는 것은 대개 권장되지 않습니다. 'hasattr (i, "__iter __")'는 아마도 더 나은 해결책 일 것입니다. – zero323
코멘트에서 언급 한 제안은 복잡하고 이해하기 어렵습니다. ** chain() ** 메소드는 다른 내부에서 호출됩니다. 중첩 수준을 인식하지 못하면 어떻게 될까요? –
IMHO 중첩 기능에는 아무 것도 복잡하지 않지만 아마도 맛의 문제 일 것입니다. 보금 자리를 알지 못하는 것에 대해서. 이 질문의 문맥에서는 형식이 고정되어 있기 때문에 실제로 중요하지 않습니다. 그러나 일반적으로 말하는 재귀는이 경우 위험 할 수 있습니다. 그 말은 '체인'보다 훨씬 느립니다. 이것을 실행 해보자 :'from random import randint; 범위 (1000)에있는 y의 경우 foo = [[[[randint (1,10)]] 범위 (1000)의 z의 경우]]; % timeit list (chain (* chain (* chain (* foo)))); % timeit list (flatten (foo))'라고 표시됩니다. – zero323