다음을 고려하세요:
items = [] items.append("apple") items.append("orange") items.append("banana") # FAKE METHOD: items.amount() # Should return 3
items
의 요소 수를 어떻게 얻습니까?
질문자 :y2k
다음을 고려하세요:
items = [] items.append("apple") items.append("orange") items.append("banana") # FAKE METHOD: items.amount() # Should return 3
items
의 요소 수를 어떻게 얻습니까?
len()
함수는 Python에서 내장형과 라이브러리형 등 여러 다른 유형과 함께 사용할 수 있습니다. 예를 들어:
>>> len([1, 2, 3]) 3
목록의 크기를 얻는 방법은 무엇입니까?
목록의 크기를 찾으려면 내장 함수 len
사용하십시오.
items = [] items.append("apple") items.append("orange") items.append("banana")
그리고 지금:
len(items)
3을 반환합니다.
파이썬의 모든 것은 목록을 포함하여 객체입니다. 모든 객체에는 C 구현에서 일종의 헤더가 있습니다.
특히 Python에서 "크기"가 있는 목록 및 기타 유사한 내장 객체에는 객체의 요소 수가 캐시되는 ob_size
따라서 목록의 개체 수를 확인하는 것은 매우 빠릅니다.
그러나 목록 크기가 0인지 여부를 확인하는 경우 len
사용하지 마십시오. 대신 목록을 부울 컨텍스트에 넣으십시오. 비어 있으면 False로 처리되고 그렇지 않으면 True 로 처리됩니다.
len(s)
객체의 길이(항목 수)를 반환합니다. 인수는 시퀀스(예: 문자열, 바이트, 튜플, 목록 또는 범위) 또는 컬렉션(예: 사전, 집합 또는 고정 집합)일 수 있습니다.
len
은 데이터 모델 문서 __len__
으로 구현됩니다.
object.__len__(self)
len()
을 구현하기 위해 호출됩니다. 객체의 길이, 정수 >= 0을 반환해야 합니다. 또한__nonzero__()
[Python 2 또는__bool__()
in Python 3] 메서드를__len__()
메서드가 0을 반환하는 객체가 고려됩니다. 부울 컨텍스트에서는 false가 됩니다.
__len__
이 목록의 방법이라는 것을 알 수 있습니다:
items.__len__()
3을 반환합니다.
len
(길이)을 얻을 수 있는 내장 유형그리고 실제로 우리는 설명된 모든 유형에 대해 이 정보를 얻을 수 있음을 알 수 있습니다.
>>> all(hasattr(cls, '__len__') for cls in (str, bytes, tuple, list, range, dict, set, frozenset)) True
len
을 사용하지 마십시오.물론 특정 길이를 테스트하려면 단순히 같음을 테스트합니다.
if len(items) == required_length: ...
그러나 길이가 0인 목록이나 그 역을 테스트하는 특별한 경우가 있습니다. 이 경우 동등성을 테스트하지 마십시오.
또한 다음을 수행하지 마십시오.
if len(items): ...
대신 다음을 수행하십시오.
if items: # Then we have some items, not empty! ...
또는
if not items: # Then we have an empty list! ...
나는 왜 여기에 설명 하지만, 짧은에, if items
또는 if not items
모두 더 읽기 더 성능이 좋은 것입니다.
"즉시 사용 가능한" 기능이 훨씬 더 합리적이라는 사실 때문에 이것이 유용하지 않을 수 있지만, 상당히 간단한 해킹은 length
속성이 있는 클래스를 빌드하는 것입니다.
class slist(list): @property def length(self): return len(self)
다음과 같이 사용할 수 있습니다.
>>> l = slist(range(10)) >>> l.length 10 >>> print l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
본질적으로 이것은 목록 객체와 정확히 동일하며 OOP 친화적인 length
속성을 갖는 추가 이점이 있습니다.
항상 그렇듯이 마일리지는 다를 수 있습니다.
len
외에도operator.length_hint
(Python 3.4+ 필요)를 사용할 수도 있습니다. 일반 list
둘 다 동일하지만 length_hint
사용하면 특정 상황에서 유용할 수 있는 목록 반복기의 길이를 얻을 수 있습니다.
>>> from operator import length_hint >>> l = ["apple", "orange", "banana"] >>> len(l) 3 >>> length_hint(l) 3 >>> list_iterator = iter(l) >>> len(list_iterator) TypeError: object of type 'list_iterator' has no len() >>> length_hint(list_iterator) 3
그러나 length_hint
는 정의상 "힌트"일 뿐이므로 대부분의 경우 len
이 더 좋습니다.
__len__
액세스를 제안하는 몇 가지 답변을 보았습니다. list
와 같은 내장 클래스를 다룰 때 len
(및 length_hint
)이 일부 안전 검사를 구현하기 때문에 사용자 지정 클래스에 문제가 발생할 수 있습니다. 예를 들어, 둘 다 음수 길이나 특정 값( sys.maxsize
값)을 초과하는 길이를 허용하지 않습니다. __len__
메서드 대신 len
함수를 사용하는 것이 항상 더 안전합니다!
그리고 완성도를 위해(주로 교육용) len()
함수를 사용하지 않고도 가능합니다. DO NOT PROGRAM LIKE LIKE THIS IN PYTHON 을 좋은 옵션으로 용납하지 않겠지만 알고리즘 학습을 위한 목적으로 사용됩니다.
def count(list): item_count = 0 for item in list[:]: item_count += 1 return item_count count([1,2,3,4,5])
list[:]
콜론이 있는 인덱스 작업은 암시적이므로 선택 사항이기도 합니다.)
여기에서 새로운 프로그래머를 위한 교훈은 다음과 같습니다. 어떤 시점에서 항목을 세지 않고는 목록의 항목 수를 얻을 수 없습니다. 문제는 다음과 같습니다. 언제 계산하는 것이 좋은가요? 예를 들어, 소켓에 대한 연결 시스템 호출(C로 작성)과 같은 고성능 코드 connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
, 요소의 길이를 계산하지 않습니다(호출 코드에 해당 책임 부여). 먼저 길이를 세는 단계를 저장하기 위해 주소의 길이가 전달된다는 점에 주목하세요. 또 다른 옵션: 계산적으로 전달하는 개체 내에 항목을 추가할 때 항목 수를 추적하는 것이 합리적일 수 있습니다. 이것은 메모리에서 더 많은 공간을 차지합니다. Naftuli Kay의 답변을 참조하십시오.
메모리에서 더 많은 공간을 차지하면서 성능을 향상시키기 위해 길이를 추적하는 예. 길이가 추적되므로 len() 함수를 사용하지 않습니다.
class MyList(object): def __init__(self): self._data = [] self.length = 0 # length tracker that takes up memory but makes length op O(1) time # the implicit iterator in a list class def __iter__(self): for elem in self._data: yield elem def add(self, elem): self._data.append(elem) self.length += 1 def remove(self, elem): self._data.remove(elem) self.length -= 1 mylist = MyList() mylist.add(1) mylist.add(2) mylist.add(3) print(mylist.length) # 3 mylist.remove(3) print(mylist.length) # 2
이전에 제공된 예와 같이 귀하의 질문에 답하십시오.
items = [] items.append("apple") items.append("orange") items.append("banana") print items.__len__()
순차 객체의 요소 수를 얻으려면 Python의 goto 메서드는 len()
예입니다.
a = range(1000) # range b = 'abcdefghijklmnopqrstuvwxyz' # string c = [10, 20, 30] # List d = (30, 40, 50, 60, 70) # tuple e = {11, 21, 31, 41} # set
len()
메서드는 위의 모든 데이터 형식이 반복 가능하기 때문에 작동할 수 있습니다. 즉, 반복할 수 있습니다.
all_var = [a, b, c, d, e] # All variables are stored to a list for var in all_var: print(len(var))
len() 메서드의 대략적인 추정
def len(iterable, /): total = 0 for i in iterable: total += 1 return total
이러한 조건에서 도움이 되는 len()이라는 내장 함수가 파이썬에 있습니다.
a=[1,2,3,4,5,6] print(len(a)) #Here the len() function counts the number of items in the list.
산출:
>>> 6
이것은 string(아래)의 경우 약간 다르게 작동합니다.
a="Hello" print(len(a)) #Here the len() function counts the alphabets or characters in the list.
산출:
>>> 5
변수 (a)는 목록이 아닌 문자열이므로 문자열의 문자 또는 알파벳 수를 계산한 다음 출력을 인쇄하기 때문입니다.
len()
실제로 작동하는 방식의 관점 에서 이것은 C 구현입니다 .
static PyObject * builtin_len(PyObject *module, PyObject *obj) /*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/ { Py_ssize_t res; res = PyObject_Size(obj); if (res < 0) { assert(PyErr_Occurred()); return NULL; } return PyLong_FromSsize_t(res); }
Py_ssize_t
는 객체가 가질 수 있는 최대 길이입니다. PyObject_Size()
는 객체의 크기를 반환하는 함수입니다. 개체의 크기를 결정할 수 없으면 -1을 반환합니다. 이 경우 다음 코드 블록이 실행됩니다.
if (res < 0) { assert(PyErr_Occurred()); return NULL; }
결과적으로 예외가 발생합니다. 그렇지 않으면 다음 코드 블록이 실행됩니다.
return PyLong_FromSsize_t(res);
C
res
int
(Python 2에는 정수를 저장하는 두 가지 유형이 있기 때문에 C 코드에서는 여전히 "Long"이라고 함)로 변환되어 반환됩니다.
len()
함수를 사용하여 파이썬에서 iterable의 길이를 찾을 수 있습니다.
my_list = [1, 2, 3, 4, 5] print(len(my_list)) # OUTPUT: 5
len()
함수는 문자열에서도 작동합니다.
my_string = "hello" print(len(my_string)) # OUTPUT: 5
결론적으로 len()
은 모든 시퀀스나 컬렉션(또는 __len__
을 정의하는 모든 크기의 객체)과 함께 작동합니다.
출처 : http:www.stackoverflow.com/questions/1712227/how-do-i-get-the-number-of-elements-in-a-list
time(1)의 출력에서 'real', 'user' 및 'sys'는 무엇을 의미합니까? (0) | 2021.12.06 |
---|---|
forEach 루프와 함께 async/await 사용 (0) | 2021.12.06 |
템플릿이 헤더 파일에서만 구현될 수 있는 이유는 무엇입니까? (0) | 2021.12.06 |
파일을 한 줄씩 목록으로 읽는 방법은 무엇입니까? (0) | 2021.12.06 |
SQL Server DateTime 데이터 유형에서 날짜만 반환하는 방법 (0) | 2021.12.04 |