문자열을 사용하여 파이썬에서 나만의 목록 유형을 구축한 방법
13149 단어 pythonfunprogramming
파이썬 🐍 선택하기
파이썬은 재미있다! 빠르게 시작할 수 있고 대규모 커뮤니티가 있으며 도움이 되는 성숙한 도구가 있습니다. JavaScript를 선택할 수도 있었지만 Python에 대한 경험이 적고 그것에 대해 더 배우고 싶었습니다.
목록 유형 디자인
이것은 대부분의 두뇌 능력이 사용되는 부분입니다 – 일반적으로. 나를 위해 그것은 빨랐다. 문자열 목록에 내 목록 유형을 다음과 같이 디자인하기로 결정했습니다.
element1,element2,element3
주로 가독성을 위해 요소 사이의 구분 기호로
","
를 선택했습니다.(유형이 지정되지 않은) Python과 마찬가지로 내 목록은 이기종일 것입니다. 즉, 동일한 목록에 다른 유형의 요소를 저장할 수 있습니다. 네이티브 목록 유형에 맞추고 구현을 단순화하기 위해 이 결정을 내렸습니다.
API 디자인 나열 📄
다음 단계는 새 목록 유형에 대한 API를 결정하는 것이었습니다. API for Python의 목록을 보고 대부분 구현하기로 했습니다.
copy()
및 reverse()
와 같은 일부는 제외하기로 선택했습니다.구현 😌
이것은 재미있는 부분이었습니다! 새 목록을 초기화하는 것은 쉬웠습니다. 빈 문자열을 만들면 됩니다.
add()
와 동일합니다. 중간에 구분 기호를 사용하여 끝에 추가하면 됩니다.__list: str = ""
__delimiter: str = ","
def add(self, element: object) -> None:
if self.is_empty():
self.__list = element
else:
self.__list += "{}{}".format(self.__delimiter, element)
약간 더 복잡한
remove()
에 대한 지원도 추가했습니다.def remove(self, element: object) -> bool:
for i in range(self.size()):
if self.get(i) == element:
self.remove_at(i)
return True
return False
결국 12개의 메서드를 구현했지만 이 게시물을 더 이상 코드로 어지럽히고 싶지 않습니다. 저장소에 대한 링크는 아래를 참조하십시오.
성능 🚀
목록 유형을 구현한 후에는 기본 목록 유형과 비교하여 성능이 어떤지 매우 궁금했습니다. 모든 새로운 방법을 벤치마킹하기로 결정했으며 결과는 다음과 같습니다.
List Function Description N Result
----------------------------------------------------------------------------------------------------------
Native constructor new instance with 100 strings 10000 7.07ms
SlowList constructor new instance with 100 strings 10000 1926.76ms
----------------------------------------------------------------------------------------------------------
Native constructor new instance with 100 ints 10000 5.95ms
SlowList constructor new instance with 100 ints 10000 1499.77ms
----------------------------------------------------------------------------------------------------------
Native constructor new instance using of() with 100 strings 10000 6.40ms
SlowList constructor new instance using of() with 100 strings 10000 1868.80ms
----------------------------------------------------------------------------------------------------------
Native constructor new instance using of() with 100 ints 10000 5.77ms
SlowList constructor new instance using of() with 100 ints 10000 1447.82ms
----------------------------------------------------------------------------------------------------------
Native add add strings to list 10000 1.00ms
SlowList add add strings to list 10000 28.26ms
----------------------------------------------------------------------------------------------------------
Native add add ints to list 10000 3.25ms
SlowList add add ints to list 10000 41.65ms
----------------------------------------------------------------------------------------------------------
Native add_at add_at fixed position with string 10000 21.93ms
SlowList add_at add_at fixed position with string 10000 684.87ms
----------------------------------------------------------------------------------------------------------
Native add_at add_at fixed position with int 10000 21.45ms
SlowList add_at add_at fixed position with int 10000 183.11ms
----------------------------------------------------------------------------------------------------------
Native contains contains with string 10000 1.19ms
SlowList contains contains with string 10000 106.24ms
----------------------------------------------------------------------------------------------------------
Native contains contains with int 10000 0.96ms
SlowList contains contains with int 10000 94.71ms
----------------------------------------------------------------------------------------------------------
Native get get last element of list of size 100 10000 0.46ms
SlowList get get last element of list of size 100 10000 104.16ms
----------------------------------------------------------------------------------------------------------
Native index_of index_of last string in list of size 100 10000 15.42ms
SlowList index_of index_of last string in list of size 100 10000 10365.40ms
----------------------------------------------------------------------------------------------------------
Native index_of index_of last int in list of size 100 10000 16.63ms
SlowList index_of index_of last int in list of size 100 10000 7364.60ms
----------------------------------------------------------------------------------------------------------
Native last_index_of last_index_of las string in list of size 100 10000 9.85ms
SlowList last_index_of last_index_of las string in list of size 100 10000 295.06ms
----------------------------------------------------------------------------------------------------------
Native last_index_of last_index_of last int in list of size 100 10000 9.08ms
SlowList last_index_of last_index_of last int in list of size 100 10000 225.17ms
----------------------------------------------------------------------------------------------------------
Native remove remove last string in list of size 100 10000 21.70ms
SlowList remove remove last string in list of size 100 10000 12636.32ms
----------------------------------------------------------------------------------------------------------
Native remove remove last string in list of size 100 10000 21.24ms
SlowList remove remove last string in list of size 100 10000 9124.89ms
----------------------------------------------------------------------------------------------------------
Native remove_at remove_at last int in list of size 100 10000 6.34ms
SlowList remove_at remove_at last int in list of size 100 10000 2270.03ms
----------------------------------------------------------------------------------------------------------
Native size size with string list of size 100 10000 0.80ms
SlowList size size with string list of size 100 10000 9.06ms
----------------------------------------------------------------------------------------------------------
Native size size with int list of size 100 10000 0.94ms
SlowList size size with int list of size 100 10000 7.40ms
----------------------------------------------------------------------------------------------------------
Native set set last string in list of size 100 10000 0.48ms
SlowList set set last string in list of size 100 10000 427.26ms
----------------------------------------------------------------------------------------------------------
Native set set last int in list of size 100 10000 0.55ms
SlowList set set last int in list of size 100 10000 430.91ms
----------------------------------------------------------------------------------------------------------
Native to_string to_string string list of size 100 10000 9.19ms
SlowList to_string to_string string list of size 100 10000 43.74ms
----------------------------------------------------------------------------------------------------------
Native to_string to_string int list of size 100 10000 269.77ms
SlowList to_string to_string int list of size 100 10000 38.11ms
정말 놀랍지 않습니다. 내 목록이 있는
to_string()
를 제외한 모든 방법에서 기본 목록이 더 빠릅니다. 더 빠르게. Python의 목록에는 to_string()
가 없으므로 ''.join(list)
를 사용하여 만들었습니다.결론
벤치마크 결과를 본 후 목록 유형의 이름이 명확해졌습니다 --
SlowList
. 나보다 Python에 대해 더 잘 아는 사람이 더 빠르고 최적화할 수 있다고 확신하지만 물론 네이티브 목록만큼 빠르지는 않을 것입니다.나는 이 프로젝트를 정말로 즐겼다. 나는 처음부터 아무도 그것을 사용하거나 Github에 별표를 표시하지 않을 것이라는 것을 알고 있었고 그것이 즐거움의 근원이었습니다. 나는 가치를 제공해야 한다는 생각에 너무 익숙해서 완전히 쓸모 없는 것을 만드는 것이 안도감을 느꼈습니다.
project on Github을 찾을 수 있습니다.
무엇 향후 계획? 🌌
이 프로젝트가 흥미롭다고 생각하고 기여하고 싶다면 몇 가지issues on Github를 볼 수 있습니다. 언제나 도움을 환영합니다 😊
자세히 알아보기 👩🏫
소프트웨어 엔지니어로서 자신을 성장시키는 방법에 대한 보다 진지한 주제는 다음 게시물을 확인하십시오.
트위터에서 팔로우
https://prplcode.dev에서 원래 게시됨
Reference
이 문제에 관하여(문자열을 사용하여 파이썬에서 나만의 목록 유형을 구축한 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/simeg/how-i-built-my-own-list-type-in-python-with-a-string-59jb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)