배열에 요소가 있는지 확인하십시오.
PHP에는 isset()
무언가 (배열 인덱스와 같은)가 존재하고 값이 있는지 확인하기 위해 호출되는 함수 가 있습니다. 파이썬은 어떻습니까?
가끔 "IndexError : list index out of range"가 발생하기 때문에 배열에 이것을 사용해야합니다.
내가 추측 할 수 시도 / 잡기를 사용하지만, 그 최후의 수단이다.
도약하기 전에보세요 ( LBYL ) :
if idx < len(array):
array[idx]
else:
# handle this
허가보다 용서를 구하는 것이 더 쉬움 ( EAFP ) :
try:
array[idx]
except IndexError:
# handle this
Python에서 EAFP는 일반적으로 더 신뢰할 수 있기 때문에 인기 있고 선호되는 스타일 인 것 같습니다. 따라서 다른 모든 것들이 동일하므로이 사용 사례에서 try
/ except
버전을 사용 하는 것이 좋습니다 . "마지막 수단"으로 보지 마십시오.
이 발췌문은 위에 링크 된 공식 문서에서 발췌 한 것으로, 흐름 제어를 제외하고 try / except 사용을 보증합니다.
이 일반적인 Python 코딩 스타일은 유효한 키 또는 속성의 존재를 가정하고 가정이 거짓으로 판명되면 예외를 포착합니다. 이 깔끔하고 빠른 스타일은 많은 try and except 서술문이 있다는 특징이 있습니다.
EAFP 대 LBYL
나는 당신의 딜레마를 이해하지만, 파이썬은 PHP와로 알려진 코딩 스타일하지 않습니다 권한보다 용서를 요청하기 쉽게 (또는 EAFP 짧은)는 파이썬에서 일반적인 코딩 스타일 .
소스를 참조하십시오 ( 문서에서 ) :
EAFP- 허가보다 용서를 구하기가 더 쉽습니다. 이 일반적인 Python 코딩 스타일은 유효한 키 또는 속성의 존재를 가정하고 가정이 거짓으로 판명되면 예외를 포착합니다. 이 깔끔하고 빠른 스타일은 많은 try and except 서술문이 있다는 특징이 있습니다. 이 기술은 C와 같은 다른 많은 언어에 공통적 인 LBYL 스타일과 대조됩니다.
따라서 기본적으로 여기에서 try-catch 문을 사용하는 것은 최후의 수단이 아닙니다. 그것은 일반적인 관행 입니다.
Python의 "배열"
PHP에는 연관 및 비 연관 배열이 있으며 Python에는 목록, 튜플 및 사전이 있습니다. 목록은 비 연관 PHP 배열과 유사하며 사전은 연관 PHP 배열과 유사합니다.
"키"가 "배열"에 있는지 확인하려면 먼저 "키"가 없을 때 다른 오류를 던지기 때문에 파이썬에서 어떤 유형인지 먼저 알려야합니다.
>>> l = [1,2,3]
>>> l[4]
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
l[4]
IndexError: list index out of range
>>> d = {0: '1', 1: '2', 2: '3'}
>>> d[4]
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
d[4]
KeyError: 4
그리고 EAFP 코딩 스타일을 사용하는 경우 이러한 오류를 적절히 포착해야합니다.
LBYL 코딩 스타일-인덱스의 존재 확인
LBYL 접근 방식을 고집한다면 다음과 같은 솔루션이 있습니다.
목록의 경우 길이를 확인
possible_index < len(your_list)
하고이면your_list[possible_index]
존재하고 그렇지 않으면 그렇지 않습니다.>>> your_list = [0, 1, 2, 3] >>> 1 < len(your_list) # index exist True >>> 4 < len(your_list) # index does not exist False
사전에 대한 당신이 사용할 수있는
in
키워드와 경우possible_index in your_dict
, 다음your_dict[possible_index]
그렇지 않으면하지 않는, 존재 :>>> your_dict = {0: 0, 1: 1, 2: 2, 3: 3} >>> 1 in your_dict # index exists True >>> 4 in your_dict # index does not exist False
도움이 되었나요?
`e` in ['a', 'b', 'c'] # evaluates as False
`b` in ['a', 'b', 'c'] # evaluates as True
편집 : 설명과 함께 새로운 답변 :
Note that PHP arrays are vastly different from Python's, combining arrays and dicts into one confused structure. Python arrays always have indices from 0
to len(arr) - 1
, so you can check whether your index is in that range. try/catch
is a good way to do it pythonically, though.
If you're asking about the hash functionality of PHP "arrays" (Python's dict
), then my previous answer still kind of stands:
`baz` in {'foo': 17, 'bar': 19} # evaluates as False
`foo` in {'foo': 17, 'bar': 19} # evaluates as True
has_key
is fast and efficient.
Instead of array use an hash:
valueTo1={"a","b","c"}
if valueTo1.has_key("a"):
print "Found key in dictionary"
You may be able to use the built-in function dir()
to produce similar behavior to PHP's isset()
, something like:
if 'foo' in dir(): # returns False, foo is not defined yet.
pass
foo = 'b'
if 'foo' in dir(): # returns True, foo is now defined and in scope.
pass
dir()
returns a list of the names in the current scope, more information can be found here: http://docs.python.org/library/functions.html#dir.
참고URL : https://stackoverflow.com/questions/8570606/check-element-exists-in-array
'Programing' 카테고리의 다른 글
읽기 성능을 위해 OLAP 데이터베이스를 비정규 화해야합니까? (0) | 2020.12.03 |
---|---|
ApplicationContext 자체를 주입하는 방법 (0) | 2020.12.03 |
asyncio는 실제로 어떻게 작동합니까? (0) | 2020.12.03 |
점진적 향상과 점진적 저하의 차이점은 무엇입니까? (0) | 2020.12.03 |
두 배열을 비교하고 일반적이지 않은 값을 얻습니다. (0) | 2020.12.03 |