Python의 목록 메서드 append와 extend의 차이점은 무엇입니까?
방식의 append()
★★★★★★★★★★★★★★★★★」extend()
append
는 목록의 끝에 지정된 개체를 추가합니다.
>>> x = [1, 2, 3]
>>> x.append([4, 5])
>>> print(x)
[1, 2, 3, [4, 5]]
extend
는 지정된 반복 가능한 요소를 추가하여 목록을 확장합니다.
>>> x = [1, 2, 3]
>>> x.extend([4, 5])
>>> print(x)
[1, 2, 3, 4, 5]
append
목록에 요소를 추가합니다. extend
는 첫 번째 목록을 다른 목록/반복 가능 목록과 연결합니다.
>>> xs = ['A', 'B']
>>> xs
['A', 'B']
>>> xs.append("D")
>>> xs
['A', 'B', 'D']
>>> xs.append(["E", "F"])
>>> xs
['A', 'B', 'D', ['E', 'F']]
>>> xs.insert(2, "C")
>>> xs
['A', 'B', 'C', 'D', ['E', 'F']]
>>> xs.extend(["G", "H"])
>>> xs
['A', 'B', 'C', 'D', ['E', 'F'], 'G', 'H']
목록 방식의 추가와 확장의 차이점은 무엇입니까?
append
는 해당 인수를 단일 요소로 목록 끝에 추가합니다.1번으로 하다extend
는 인수를 반복하여 각 요소를 목록에 추가하고 목록을 확장합니다.목록의 길이는 아무리 많은 요소가 반복 가능한 논쟁에 포함되었더라도 늘어날 것입니다.
append
list.append
방법
my_list.append(object)
, 이든 간에, 문자열, 다른 것이든 에, 그 .my_list
이치노
>>> my_list
['foo', 'bar']
>>> my_list.append('baz')
>>> my_list
['foo', 'bar', 'baz']
리스트는 오브젝트라는 것을 명심해 주세요.목록에 다른 목록을 추가할 경우 첫 번째 목록은 목록 끝에 있는 단일 개체가 됩니다(원하는 개체가 아닐 수 있음).
>>> another_list = [1, 2, 3]
>>> my_list.append(another_list)
>>> my_list
['foo', 'bar', 'baz', [1, 2, 3]]
#^^^^^^^^^--- single item at the end of the list.
extend
list.extend
하여 목록을 확장합니다.
my_list.extend(iterable)
확장과 함께 반복 가능한 각 요소가 목록에 추가됩니다.예를 들어 다음과 같습니다.
>>> my_list
['foo', 'bar']
>>> another_list = [1, 2, 3]
>>> my_list.extend(another_list)
>>> my_list
['foo', 'bar', 1, 2, 3]
문자열은 반복할 수 있으므로 문자열을 사용하여 목록을 확장하면 문자열에 각 문자가 추가됩니다(원하는 문자열이 아닐 수 있음).
>>> my_list.extend('baz')
>>> my_list
['foo', 'bar', 1, 2, 3, 'b', 'a', 'z']
오버로드, "Overload",__add__
)+
및 )의 개요__iadd__
)+=
)
다.+
★★★★★★★★★★★★★★★★★」+=
는 '하다'에 정의되어 .list
이치노
my_list + another_list
그럼 메모리에 세 번째 목록이 생성되므로 결과를 반환할 수 있지만 두 번째 반복 가능한 목록이 필요합니다.
my_list += another_list
는 리스트를 in-place(in-place 연산자이며, 리스트는 변경 가능한 오브젝트)로 변경하기 때문에 새로운 리스트는 작성되지 않습니다.두 번째 반복은 어떤 종류의 반복도 가능하다는 점에서 확장과 같이 작동합니다.
my_list = my_list + another_list
is is is+=
my_list에 할당된
시간의 복잡성
Append에는 일정한 시간 복잡도 O(1)가 있습니다.
연장은 시간이 복잡합니다. O(k)
을 통해 ""로 합니다.append
는 복잡함을 가중시켜 확장과 동등하게 하고 확장의 반복은 C에서 구현되므로 반복 가능한 항목에서 목록에 연속 항목을 추가하는 것이 항상 빠릅니다.
리스트 오브젝트 실장 소스로부터의 "amortized"에 대해서:
/* This over-allocates proportional to the list size, making room
* for additional growth. The over-allocation is mild, but is
* enough to give linear-time amortized behavior over a long
* sequence of appends() in the presence of a poorly-performing
* system realloc().
즉, 필요한 것보다 큰 메모리 재할당의 이점을 미리 얻을 수 있지만, 더 큰 메모리 재할당을 통해 다음 한계 재할당에 비용을 지불할 수도 있습니다.모든 추가에 대한 총 시간은 O(n)에서 선형이며 추가당 할당된 시간은 O(1)가 됩니다.
성능
append를 사용하면 extend와 동일한 결과를 얻을 수 있으므로 어떤 것이 더 나은지 궁금할 수 있습니다.다음 함수도 동일한 작업을 수행합니다.
def append(alist, iterable):
for item in iterable:
alist.append(item)
def extend(alist, iterable):
alist.extend(iterable)
시간을 재봅시다.
import timeit
>>> min(timeit.repeat(lambda: append([], "abcdefghijklmnopqrstuvwxyz")))
2.867846965789795
>>> min(timeit.repeat(lambda: extend([], "abcdefghijklmnopqrstuvwxyz")))
0.8060121536254883
타이밍에 대한 코멘트의 수신처 지정
해설자는 다음과 같이 말했다.
완벽한 답변입니다. 단지 하나의 요소만 추가하는 비교 타이밍을 놓쳤을 뿐입니다.
의미론적으로 올바른 작업을 수행합니다. 가능한로 추가할 를 합니다.extend
요소만 을 사용합니다append
.
자, 그럼 이 작업이 제시간에 어떻게 진행되는지 알아보기 위한 실험을 만들어 봅시다.
def append_one(a_list, element):
a_list.append(element)
def extend_one(a_list, element):
"""creating a new list is semantically the most direct
way to create an iterable to give to extend"""
a_list.extend([element])
import timeit
확장 기능을 사용하기 위해 반복 가능한 제품을 만드는 것은 시간 낭비라는 것을 알 수 있습니다.
>>> min(timeit.repeat(lambda: append_one([], 0)))
0.2082819009956438
>>> min(timeit.repeat(lambda: extend_one([], 0)))
0.2397019260097295
우리가 수 있는 것은 을 알 수 .extend
추가할 요소가 하나밖에 없을 때 말이죠.
또한 이러한 타이밍은 그다지 중요하지 않습니다.Python에서는 의미론적으로 올바른 작업을 수행하는 것이 올바른 방법™이라는 점을 강조하기 위한 것입니다.
비교 가능한 두 가지 연산에 대해 타이밍을 테스트하여 애매하거나 반대의 결과를 얻을 수 있습니다.의미론적으로 올바른 일을 하는 데만 집중하세요.
결론
되어 있는 것을 알 수 있습니다.extend
하고, 「동작」보다 할 수 있습니다.append
반복 가능한 각 요소를 목록에 추가하는 경우.
(수 없는 )를합니다.append
.
append
는 단일 요소를 추가합니다. extend
요소 목록을 추가합니다.
추가할 목록을 전달해도 다음과 같은 요소가 추가됩니다.
>>> a = [1, 2, 3]
>>> a.append([4, 5, 6])
>>> a
[1, 2, 3, [4, 5, 6]]
추가와 확장
append를 사용하여 목록을 확장하는 단일 요소를 추가할 수 있습니다.
>>> a = [1,2]
>>> a.append(3)
>>> a
[1,2,3]
둘 이상의 요소를 확장하려면 extend를 사용해야 합니다. 엘리먼트 또는 요소 목록을 하나만 추가할 수 있기 때문입니다.
>>> a.append([4,5])
>>> a
>>> [1,2,3,[4,5]]
그러면 네스트된 목록을 얻을 수 있습니다.
대신 extend를 사용하여 단일 요소를 다음과 같이 확장할 수 있습니다.
>>> a = [1,2]
>>> a.extend([3])
>>> a
[1,2,3]
또는 append와는 달리 목록을 원래 요소에 중첩하지 않고 한 번에 더 많은 요소를 확장합니다(이것이 이름 확장의 이유입니다).
>>> a.extend([4,5,6])
>>> a
[1,2,3,4,5,6]
두 가지 방법을 모두 사용하여 하나의 요소 추가
append와 extend 모두 목록 끝에 하나의 요소를 추가할 수 있지만 append가 더 간단합니다.
요소 1개 추가
>>> x = [1,2]
>>> x.append(3)
>>> x
[1,2,3]
하나의 요소를 확장하다
>>> x = [1,2]
>>> x.extend([3])
>>> x
[1,2,3]
요소를 추가하는 중...다른 결과를 낳다
여러 요소에 대해 추가를 사용하는 경우 요소 목록을 인수로 전달해야 합니다. 그러면 NESTED 목록을 얻을 수 있습니다.
>>> x = [1,2]
>>> x.append([3,4])
>>> x
[1,2,[3,4]]
대신 extend를 사용하면 인수로 목록을 전달하지만 이전 요소에 중첩되지 않은 새 요소가 포함된 목록을 얻을 수 있습니다.
>>> z = [1,2]
>>> z.extend([3,4])
>>> z
[1,2,3,4]
따라서 요소가 많을수록 extend를 사용하여 항목이 더 많은 목록을 가져옵니다.그러나 목록을 추가하면 목록에 요소가 추가되는 것이 아니라 코드 출력에서 알 수 있듯이 중첩된 목록인 요소가 하나 추가됩니다.
다음 2개의 스니펫은 의미상 동등합니다.
for item in iterator:
a_list.append(item)
그리고.
a_list.extend(iterator)
루프가 C에 실장되어 있기 때문에 후자의 속도가 빨라질 수 있습니다.
append()
방법
x = [1, 2, 3]
x.append([4, 5])
x.append('abc')
print(x)
# gives you
[1, 2, 3, [4, 5], 'abc']
extend()
클래스로 을 사용법목록을 만드는 것은 정말로 클래스를 인스턴스화하는 것입니다.따라서 목록에는 해당 목록에서 작동하는 메서드가 있습니다.)
x = [1, 2, 3]
x.extend([4, 5])
x.extend('abc')
print(x)
# gives you
[1, 2, 3, 4, 5, 'a', 'b', 'c']
Dive Into Python에서.
원래대로 연장하는 대신 반환 연장에는 "+"를 사용할 수 있습니다.
l1=range(10)
l1+[11]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11]
l2=range(10,1,-1)
l1+l2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2]
로, 하 similarly similarly+=
행동을 위해 with 하지만 리 자 서 동 해 간 for,있 behavior차약,가 place diffe in다rences의 but from위이나행제 slight에의을그러, behavior for placeappend
&&extend
. . One of the biggest differences of 가장 큰 차이점 중 하나는+=
부에서append
and 그리고.extend
함수 범위에서 사용되는 경우 이 블로그 게시물을 참조하십시오.
append(object)
목록에서 개체를 추가할 수 있습니다.는 개체를 목록에 추가하여 목록을 업데이트합니다.
x = [20]
# List passed to the append(object) method is treated as a single object.
x.append([21, 22, 23])
# Hence the resultant list length will be 2
print(x)
--> [20, [21, 22, 23]]
extend(list)
두 개의 목록을 정렬합니다.2번입니다.
x = [20]
# The parameter passed to extend(list) method is treated as a list.
# Eventually it is two lists being concatenated.
x.extend([21, 22, 23])
# Here the resultant list's length is 4
print(x)
--> [20, 21, 22, 23]
은 것은은 this this this this this this this this this에 해당합니다.append
★★★★★★★★★★★★★★★★★」extend
+
★★★★★★★★★★★★★★★★★★:
>>> x = [1,2,3]
>>> x
[1, 2, 3]
>>> x = x + [4,5,6] # Extend
>>> x
[1, 2, 3, 4, 5, 6]
>>> x = x + [[7,8]] # Append
>>> x
[1, 2, 3, 4, 5, 6, [7, 8]]
extend()
는 반복 인수와 함께 사용할 수 있습니다.여기 예가 있습니다.다음과 같은 방법으로 목록 목록에서 목록을 만듭니다.
부터
list2d = [[1,2,3],[4,5,6], [7], [8,9]]
너는 원한다
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
하면 .itertools.chain.from_iterable()
그렇게 하기 위해서.이 메서드의 출력은 반복기입니다.구현은 다음과 같습니다.
def from_iterable(iterables):
# chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
for it in iterables:
for element in it:
yield element
이 예시로 돌아가면
import itertools
list2d = [[1,2,3],[4,5,6], [7], [8,9]]
merged = list(itertools.chain.from_iterable(list2d))
지명수배자 명단도 얻고요
하게 되는가 하는 것이다extend()
는 interpreter 사용할 수 .interpreter interprator 는 interpreter 입니다.
merged = []
merged.extend(itertools.chain.from_iterable(list2d))
print(merged)
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
append():기본적으로 Python에서 하나의 요소를 추가하기 위해 사용됩니다.
예 1:
>> a = [1, 2, 3, 4]
>> a.append(5)
>> print(a)
>> a = [1, 2, 3, 4, 5]
예 2:
>> a = [1, 2, 3, 4]
>> a.append([5, 6])
>> print(a)
>> a = [1, 2, 3, 4, [5, 6]]
extend():여기서 extend()는 2개의 목록을 Marge하거나 1개의 목록에 여러 요소를 삽입하기 위해 사용합니다.
예 1:
>> a = [1, 2, 3, 4]
>> b = [5, 6, 7, 8]
>> a.extend(b)
>> print(a)
>> a = [1, 2, 3, 4, 5, 6, 7, 8]
예 2:
>> a = [1, 2, 3, 4]
>> a.extend([5, 6])
>> print(a)
>> a = [1, 2, 3, 4, 5, 6]
암시되었지만 설명되지 않은 흥미로운 점은 연장이 추가보다 빠르다는 것입니다.내부에 추가되는 루프는 list.extend(processed_elements)로 대체되는 것으로 간주해야 합니다.
새로운 요소를 추가하면 목록 전체가 메모리의 더 나은 위치에 재할당할 수 있다는 점에 유의하십시오.한 번에 1개의 요소를 추가하고 있기 때문에 여러 번 이 작업을 수행하면 전체적인 성능이 저하됩니다.그런 의미에서 list.extend는 ""join(stringlist)"과 유사합니다.
추가는 전체 데이터를 한 번에 추가합니다.전체 데이터가 새로 생성된 인덱스에 추가됩니다. 반,는extend
이름에서 알 수 있듯이 현재 배열을 확장합니다.
예를들면
list1 = [123, 456, 678]
list2 = [111, 222]
★★★★★★★★★★★★★★★★ append
을 사용하다
result = [123, 456, 678, [111, 222]]
★★★★★★★★★★★★★★★★★★★★★extend
을 사용하다
result = [123, 456, 678, 111, 222]
에는 어어사 the the the the the the the the the the the the the라는 단어가 정의되어 .append
★★★★★★★★★★★★★★★★★」extend
같이요.
append: 문서 끝에 (뭔가를) 추가합니다.
확장: 더 크게 만듭니다.확대 또는 확장
그 지식을 바탕으로 이제 이해합시다.
1) 와의 차이
다음과 같습니다append
.
- 있는 그대로 Python 개체를 목록 끝에 추가합니다(예: 목록의 마지막 요소로).
- 결과 목록은 중첩될 수 있으며 이종 요소(리스트, 문자열, 튜플, 사전, 세트 등)를 포함할 수 있습니다.
다음과 같습니다extend
.
- 반복 가능한 모든 항목을 인수로 받아들여 목록을 더 크게 만듭니다.
- 결과 네스트 이며, 를 한 결과,그에 이종 요소(예를 들면 플로트.
list(iterable)
.
2) 와의 유사성
- 둘 다 정확히 하나의 주장을 받아들인다.
- 둘 다 목록을 일괄적으로 수정합니다.
- 양쪽 반환됩니다.
None
.
예
lis = [1, 2, 3]
# 'extend' is equivalent to this
lis = lis + list(iterable)
# 'append' simply appends its argument as the last element to the list
# as long as the argument is a valid Python object
list.append(object)
이 질문에 도움이 될 만한 보충 자료가 되었으면 합니다.에 특정 가 저장되어 있는 (예: " " ).Info
extend
방법이 적절하지 않습니다.①의 for
및 에 대해 합니다.Info
사용하고 .extend
이치노을 사용하다
TypeError: 'Info' 개체를 반복할 수 없습니다.
,을 append
결과는 OK.method, OK. 매번 RPM을 할 extend
메서드는 항상 목록 또는 다른 수집 유형으로 처리하여 반복하고 이전 목록 뒤에 배치합니다.특정 개체를 반복할 수 없습니다.
직감적으로 구별하다
l1 = ['a', 'b', 'c']
l2 = ['d', 'e', 'f']
l1.append(l2)
l1
['a', 'b', 'c', ['d', 'e', 'f']]
같습니다l1
그녀의 몸 안에 시체를 재현하다.
# Reset l1 = ['a', 'b', 'c']
l1.extend(l2)
l1
['a', 'b', 'c', 'd', 'e', 'f']
별거 중인 두 사람이 결혼해서 단란한 가정을 꾸리는 것과 같아요.
게다가 모든 리스트의 방법에 대한 완전한 치트 시트를 만들어서 참고하도록 하겠습니다.
list_methods = {'Add': {'extend', 'append', 'insert'},
'Remove': {'pop', 'remove', 'clear'}
'Sort': {'reverse', 'sort'},
'Search': {'count', 'index'},
'Copy': {'copy'},
}
extend(L)
합니다.L
.
>>> a
[1, 2, 3]
a.extend([4]) #is eqivalent of a[len(a):] = [4]
>>> a
[1, 2, 3, 4]
a = [1, 2, 3]
>>> a
[1, 2, 3]
>>> a[len(a):] = [4]
>>> a
[1, 2, 3, 4]
append
리스트는 1개의 항목(인수로서 전달된)만으로 「수정」됩니다.
extend
전달된 개체(인수)에 포함된 항목 수만큼 목록을 "제자리"합니다.
은 약간 수 .str
★★★★★★★★★★★★★★★★★★.
- 로서 문자열을:
append
는 끝에 합니다.단, 스트링 항목은 "예"로 지정합니다.extend
'싱글' '스트' '스트레' 。 - :
append
의 '하고 '목록' 항목을 추가합니다.extend
는 통과된 목록의 길이만큼 '목록' 항목을 추가합니다.
def append_o(a_list, element): a_list.append(element) print('append:', end = ' ') for item in a_list: print(item, end = ',') print() def extend_o(a_list, element): a_list.extend(element) print('extend:', end = ' ') for item in a_list: print(item, end = ',') print() append_o(['ab'],'cd') extend_o(['ab'],'cd') append_o(['ab'],['cd', 'ef']) extend_o(['ab'],['cd', 'ef']) append_o(['ab'],['cd']) extend_o(['ab'],['cd'])
생산:
append: ab,cd,
extend: ab,c,d,
append: ab,['cd', 'ef'],
extend: ab,cd,ef,
append: ab,['cd'],
extend: ab,cd,
추가 및 확장은 비단뱀의 확장성 메커니즘 중 하나입니다.
추가: 목록 끝에 요소를 추가합니다.
my_list = [1,2,3,4]
목록에 새 요소를 추가하려면 다음과 같은 방법으로 추가 방법을 사용할 수 있습니다.
my_list.append(5)
새 요소가 추가되는 기본 위치는 항상 (length+1) 위치에 있습니다.
Insert : append의 한계를 극복하기 위해 insert 메서드를 사용했습니다.삽입을 사용하면 새 요소를 삽입할 정확한 위치를 명시적으로 정의할 수 있습니다.
삽입(인덱스, 객체)의 메서드 기술자입니다.여기에는 두 가지 인수가 필요합니다.첫 번째는 요소를 삽입하는 인덱스이고 두 번째는 요소 자체입니다.
Example: my_list = [1,2,3,4]
my_list[4, 'a']
my_list
[1,2,3,4,'a']
확장: 이것은 여러 목록을 하나의 목록으로 결합할 때 매우 유용합니다.확장 기능을 사용하지 않으면 두 개의 목록을 결합할 경우 결과 개체에는 목록 목록이 포함됩니다.
a = [1,2]
b = [3]
a.append(b)
print (a)
[1,2,[3]]
pos 2에서 요소에 액세스하려고 하면 요소가 아닌 목록([3])이 표시됩니다.두 목록에 가입하려면 append를 사용해야 합니다.
a = [1,2]
b = [3]
a.extend(b)
print (a)
[1,2,3]
여러 목록을 결합하려면
a = [1]
b = [2]
c = [3]
a.extend(b+c)
print (a)
[1,2,3]
언급URL : https://stackoverflow.com/questions/252703/what-is-the-difference-between-pythons-list-methods-append-and-extend
'programing' 카테고리의 다른 글
JSON 옥텟이란 무엇이며, 2개가 필요한 이유는 무엇입니까? (0) | 2023.02.23 |
---|---|
Object.entries가 아닌 오브젝트에 대해 반복할 수 있는 올바른 방법 (0) | 2023.02.23 |
TLD는 얼마나 걸릴 수 있습니까? (0) | 2023.01.28 |
리소스 예약 패턴의 잠금 및 분리 (0) | 2023.01.28 |
mysqldb python 인터페이스를 설치할 때 mysql_config를 찾을 수 없습니다. (0) | 2023.01.28 |