파이썬에서 목록의 요소 수(목록 길이)를 가져오려면 어떻게 해야 합니까?
입니까?items?
items = ["apple", "orange", "banana"]
# There are 3 items.
이 기능은 Python에서 기본 제공 유형과 라이브러리 유형 모두에서 여러 다른 유형과 함께 사용할 수 있습니다.예:
>>> len([1, 2, 3])
3
목록의 길이를 얻으려면 어떻게 해야 합니까?
목록에서 요소 수를 찾으려면 내장 함수를 사용합니다.
items = []
items.append("apple")
items.append("orange")
items.append("banana")
그리고 이제:
len(items)
3을 반환합니다.
설명.
목록을 포함하여 Python의 모든 것은 객체입니다.모든 개체는 C 구현에 어떤 종류의 헤더를 가지고 있습니다.
특히 Python에서 "크기"를 가진 목록 및 기타 유사한 기본 제공 개체는 다음과 같은 속성을 가집니다.ob_size개체의 요소 수가 캐시됩니다.따라서 목록의 개체 수를 확인하는 것은 매우 빠릅니다.
러목록크지는 0확경마사십오우지시용하하인기가마오▁uset▁but십'시▁size▁don▁or▁if▁is인사지용▁list하그▁you▁zero▁not러를 사용하지 마십시오.len대신 목록을 부울 컨텍스트에 넣습니다. 목록이 비어 있으면 False로 처리되고 비어 있지 않으면 True로 처리됩니다.
문서에서
len(s)
개체의 길이(항목 수)를 반환합니다.인수는 시퀀스(예: 문자열, 바이트, 튜플, 목록 또는 범위) 또는 컬렉션(예: 사전, 집합 또는 고정 집합)일 수 있습니다.
len는 를사여구니로 구현됩니다.__len__데이터 모델 문서:
object.__len__(self)
기본공제기구현위호다니출됩해를 됩니다.
len()개체의 길이를 정수 >= 0으로 반환해야 합니다. 또한, 정지않을하지 않는__nonzero__()2 또는 [Python 2 는또▁python]에서__bool__()3] 및 의 썬파및사3] 방용자법이사▁in자용.__len__()method returns 0은 부울 컨텍스트에서 거짓으로 간주됩니다.
그리고 우리는 또한 볼 수 있습니다.__len__의 한 방법입니다.
items.__len__()
3을 반환합니다.
으로 기본제공다같습다니음과형유은는되▁the▁you▁get다▁built니습in를 얻을 수 있습니다.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 친화적인 OOP를 인 이점이 .length소유물.
항상 그렇듯 마일리지는 다를 수 있습니다.
또한 Python 3.4+도 사용할 수 있습니다.보통의 경우list 다하지만, 둘 다 동 등 하 지 만 하 지 만 동,등▁both,length_hint 수 . 는 특정할 수 . 다음과 같습니다. 사 용 하 상 특 유 서 황 에 정 수 있 용 습 니 할 다 이 는 를 있 며 으 수 목 면 록 얻 을 반 이길를복기의▁makes니습있다▁in
>>> 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몇 점검을 몇 가지 안전 점검을 시행합니다.를 들어, 두 모두 이 경우는 두가모, 음지길이또는의특않다정습니길값허이지초는용하를과하을들어예두를▁for▁thatthe▁(▁lengths▁both않다습▁negative니▁value▁do▁or▁a▁certain허▁lengths▁allow▁example▁exceed지용하▁not길,이를,예는과).sys.maxsize값).그래서 항상 더 안전하게 사용할 수 있습니다.len 대신 합니다.__len__방법!
그리고 완전성(주로 교육적)을 위해, 그것은 사용하지 않고도 가능합니다.len()기능.저는 이것을 파이썬에서 이렇게 프로그래밍하지 않는 좋은 옵션으로 용납하지 않겠지만, 알고리즘을 학습하는 목적을 제공합니다.
def count(list): # list is an iterable object but no type checking here!
item_count = 0
for item in list:
item_count += 1
return item_count
count([1,2,3,4,5])
(목록 개체는 판독 가능해야 하며, 다음과 같이 암시되어야 합니다.for..in스탠자).
여기서 새로운 프로그래머들에게 주는 교훈은 목록에 있는 항목의 수를 계산하지 않고는 얻을 수 없다는 것입니다.질문은 다음과 같습니다. 언제 그들을 세어보는 것이 좋을까요?들어 소켓에 )과 는 예를들소대연시결호스출같은코(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__()
당신은 할 수 .len()파이썬에서 반복 가능한 길이를 찾는 함수.
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__).
이러한 상황에서 도움이 될 python에는 len()이라는 내장 함수가 있습니다.
>>> a = [1,2,3,4,5,6]
>>> len(a) # Here the len() function counts the number of items in the list.
6
문자열의 경우에는 약간 다르게 작동합니다. 문자 수를 계산합니다.
>>> a = "Hello"
>>> len(a)
5
목록에서 요소의 길이를 찾을 수 있는 세 가지 방법이 있습니다.저는 여기서 성능 분석과 세 가지 방법을 비교하겠습니다.
1: 1: 사용법len()
items = []
items.append("apple")
items.append("orange")
items.append("banana")
print(len(items))
출력:
3
방법 2: 나이브 카운터 방법 사용
items = []
items.append("apple")
items.append("orange")
items.append("banana")
counter = 0
for i in items:
counter = counter + 1
print(counter)
출력:
3
3: 3: 사용법length_hint()
items = []
items.append("apple")
items.append("orange")
items.append("banana")
from operator import length_hint
list_len_hint = length_hint(items)
print(list_len_hint)
출력:
3
분석 –함 대 순진함 – 순수함len() 대length_hint()
참고: 비교를 위해 입력 목록을 시간 차이를 많이 낼 수 있는 큰 세트로 변경하여 방법을 비교하고 있습니다.
items = list(range(100000000))
# Performance Analysis
from operator import length_hint
import time
# Finding length of list
# using loop
# Initializing counter
start_time_naive = time.time()
counter = 0
for i in items:
# incrementing counter
counter = counter + 1
end_time_naive = str(time.time() - start_time_naive)
# Finding length of list
# using len()
start_time_len = time.time()
list_len = len(items)
end_time_len = str(time.time() - start_time_len)
# Finding length of list
# using length_hint()
start_time_hint = time.time()
list_len_hint = length_hint(items)
end_time_hint = str(time.time() - start_time_hint)
# Printing Times of each
print("Time taken using naive method is : " + end_time_naive)
print("Time taken using len() is : " + end_time_len)
print("Time taken using length_hint() is : " + end_time_hint)
출력:
Time taken using naive method is : 7.536813735961914
Time taken using len() is : 0.0
Time taken using length_hint() is : 0.0
결론
두방법에 시간이 알 수 .len()&length_hint()를 사용하는 것이 가장 좋습니다.
개체의 는 순적객체요의소수얻를면 Python법다같습다니입니다.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(list)또는list.__len__()
방법에 관해서는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는 개체가 가질 수 있는 최대 길이입니다. 는 개체의 크기를 반환하는 함수입니다.개체의 크기를 확인할 수 없는 경우 -1을 반환합니다.이 경우 이 코드 블록이 실행됩니다.
if (res < 0) {
assert(PyErr_Occurred());
return NULL;
}
그 결과 예외가 발생합니다.그렇지 않으면 이 코드 블록이 실행됩니다.
return PyLong_FromSsize_t(res);
res은 즉, 즉입니다.C 됩니다.int(Python 2에는 정수를 저장하기 위한 두 가지 유형이 있었기 때문에 C 코드에서는 여전히 "Long"으로 불림) 반환되었습니다.
언급URL : https://stackoverflow.com/questions/1712227/how-do-i-get-the-number-of-elements-in-a-list-length-of-a-list-in-python
'programing' 카테고리의 다른 글
| 월, 일, 연도에 Mongodb 쿼리...옛날의 (0) | 2023.05.02 |
|---|---|
| 가장 유용한 NLog 구성 (0) | 2023.05.02 |
| 에서 HTTP POST 요청을 보냅니다.그물 (0) | 2023.05.02 |
| 파이썬에서 목록의 모든 숫자에서 값을 빼시겠습니까? (0) | 2023.05.02 |
| 스프링 데이터가 있는 MongoRepository에서 쿼리 주석을 사용하는 동안 쿼리를 표시하는 방법 (0) | 2023.05.02 |