Pythonの知識ポイント

Python構文

# 浅いコピー操作では、コピーされたオブジェクトの第1レベルのオブジェクトのみがコピーされ、より深いレベルでは、次の例のように、その参照のみがコピーされます。`a[2]`
# と`lst[2]`これらの2つのオブジェクトは2番目のレイヤーです。実際、浅いコピーの後、これらの2つのオブジェクトは1つのオブジェクトのままです。ディープコピーは完全にコピーされます
# シェルオブジェクトのすべての階層オブジェクトは真のコピーです。
>>> from copy import copy, deepcopy
>>> lst =[1,2,[3,4]]>>> a, b =copy(lst),deepcopy(lst)>>> a,b([1,2,[3,4]],[1,2,[3,4]])>>>id(lst[2]),id(a[2]),id(b[2])(139842737414224,139842737414224,139842737414584)>>> lst[0]=10>>> a
[1,2,[3,4]]>>> b
[1,2,[3,4]]>>> lst[2][0]='test'>>> lst
[10,2,[' test',4]]>>> a
[1,2,[' test',4]]>>> b
[1,2,[3,4]]
>>> def foo(a, b=[1,2]):print(b)
  b.append(a)print(b)>>> val =4>>>foo(val)
# [1,2]
# [1,2,4]>>> foo(val)
# [1,2,4]
# [1,2,4,4]
# ここで、関数が2回実行されたときに、デフォルトパラメータbの値が次のようになっていることがわかります。`[1, 2, 4]`その理由は、デフォルトのパラメーターが最初のパラメーターのみにあるためです。
# 一度実行すると初期化され、後でデフォルトで使用されます**初期化後のこのオブジェクト(見積もり)**、しかしここでbは可変オブジェクトであり、
# 追加された要素はまだ前のオブジェクトであるため、参照は変更されていませんが、値は変更されています。

データ構造、アルゴリズム#

# coding: utf-8from collections import deque

classBNode:"""バイナリツリーノード"""

 def __init__(self, value, left=None, right=None):
  self.value = value
  self.left = left
  self.right = right

def level_traverse(binary_tree):"""階層トラバーサルバイナリツリー"""
 stack =deque([binary_tree])while stack:
  top = stack.popleft()print(top.value)if top.left:
   stack.append(top.left)if top.right:
   stack.append(top.right)if __name__ =="__main__":
 b_tree =BNode(1,BNode(2,BNode(4,BNode(5,BNode(7)))),BNode(3,BNode(6, right=BNode(8))))level_traverse(b_tree)
# VタイプとYタイプがあり、交差する場合は最後のノードが同じである必要があるため、最後のノードから直接逆トラバースが実行されます。
# 単一リンクリストを逆にする
def reverse_single_link_lst(link_lst):if not link_lst:return link_lst
 pre = link_lst
 cur = link_lst.next
 pre.next = None
 while cur:
  tmp = cur.next
  cur.next = pre
  pre = cur
  cur = tmp
 return pre

# 交差点を探す
def point(node_a, node_b):if node_a is None or node_b is None:return None
 next_a, next_b = node_a, node_b
 while next_a or next_b:if next_a.val == next_b.val:if next_a.next and next_b.next and(next_a.next.val == next_b.next.val):
    next_a, next_b = next_a.next, next_b.next
    continuereturn next_a.val
  next_a, next_b = next_a.next, next_b.next
 return None

# 単一リンクリストを作成する
classNode(object):
 def __init__(self, value, next=None):
  self.val = value
  self.next = next

a =ListNode(1,ListNode(2,ListNode(3,ListNode(4,ListNode(5)))))
b =ListNode(7,ListNode(9,ListNode(4,ListNode(5))))

ra =reverse_single_link_lst(a)
rb =reverse_single_link_lst(b)point(ra, rb)
# output:
# 4
# クイックソート、lzは当時、書くのがより複雑でしたが、次のように、それが最も一般的な書き方でした(緊張がいくつかの小さなバグを引き起こしました)。
def quick_sort(lst, start, stop):if start < stop:
  i, j, x = start, stop, lst[start]while i < j:while(i < j)and(lst[j]> x):
    j -=1if(i < j):
    lst[i]= lst[j]
    i +=1while(i < j)and(lst[i]< x):
    i +=1if(i < j):
    lst[j]= lst[i]
    j -=1
  lst[i]= x
  quick_sort(lst, start, i-1)quick_sort(lst, i+1, stop)return lst

その後、インタビュアー[akun](https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fakun)は、特に簡潔な表記、3方向多重化を行い、アドレスは[Gist](https://links.jianshu.com/go?to=https%3A%2F%2Fgist.github.com%2Fakun%2Fd90998068f4e1f3eb169)にあります。

def qsort(alist):"""
 quick sort(easy way, but more memory)
 test: python -m doctest qsort.py
 >>> import math
 >>> import random
 >>> size =100>>> alist =[random.randint(0, size *10)for i inrange(size)]>>> qlist =qsort(alist)>>> alist.sort()>>> assert qlist == alist
    """

 iflen(alist)<=1:return alist

 key = alist[0]
 left_list, middle_list, right_list =[],[],[][{i < key: left_list, i == key: middle_list, i > key: right_list}[
  True
 ]. append(i)for i in alist]returnqsort(left_list)+ middle_list +qsort(right_list)

データベース#

インターネット#

オペレーティング・システム#

プログラミングに関する質問#

# 関数が正しい結果を返すまでの再試行回数を指定できます。
@ retry(retries=3)
def func(*args,**kw):try:
  # some action
  return True
 except:return False

このように書くことができます、

from functools import wraps

def retry(retries=3):
 def timesf(func):
  @ wraps(func)
  def wrap(*args,**kw):
   i =0
   status = True
   while status and i < times:
    status =func(*args,**kw)
    i +=1return status
  return wrap
 return timesf

Recommended Posts

Pythonの知識ポイント
Python3補足知識ポイント
Pythonの高度な知識ポイント
Pythonクローラーの基本的な知識ポイントの仕上げ
Pythonの解凍に関する知識ポイントの要約
pythonでのシェル実行の知識ポイント
Pythonの基礎知識(1)
Python基礎知識質問バンク
Python3.9の注目すべき更新ポイント
Pythonモジュールの知識の完全な分析
Pythonマルチスレッド
Python CookBook
Python FAQ
Python3辞書
Python3モジュール
python(you-get)
Python文字列
Python記述子
Pythonの基本2
Pythonノート
Python3タプル
CentOS + Python3.6 +
Python Advanced(1)
Pythonデコレータ
Python IO
Pythonマルチスレッド
Pythonツールチェーン
Python3リスト
Pythonマルチタスク-日常
Pythonの概要
pythonの紹介
Pythonアナリティック
Pythonの基本
07.Python3関数
Pythonの基本3
Pythonマルチタスクスレッド
Python関数
python sys.stdout
python演算子
Pythonエントリ-3
Centos 7.5 python3.6
Python文字列
pythonキューキュー
Pythonの基本4
Pythonの基本5
Centos7システム強化の知識ポイントを要約する