【Python】面接の基本的な知識ポイントの整理
1.インタプリタ言語とコンパイル言語の違い
コンパイル言語:準備されたすべてのソースプログラムをバイナリ実行可能プログラムにコンパイルします。次に、このプログラムを直接実行できます。例:C、C ++
インタプリタ言語:完成したソースプログラムの1文を翻訳し、最後まで1文を実行します。例:Python、
(Javaは少し特殊です。Javaプログラムもコンパイルする必要がありますが、機械語と呼ばれる直接コンパイルではなく、バイトコードと呼ばれるコンパイルが行われ、バイトコードは解釈された方法で実行されます。)
2.データ型の一般的な方法
1つはフォーマットフォーマット機能
str.format()関数はフォーマット文字列関数であり、この関数はさまざまな文字列をすばやく処理できます。
%の代わりに{}と:を使用します。
文字列のフォーマットでは、format()メソッドを使用します。使用される基本的なフォーマットは次のとおりです。
<template string> .format(<comma-separated parameters>)
format()メソッドを呼び出すと、0から始まる番号のパラメーターを持つ新しい文字列が返されます。 。
1、通过关键字
print('{name}在{option}'.format(name="谢某人",option="写代码"))
结果:谢某人在写代码
2、通过位置
print('name={} path={}'.format('zhangsan', '/')
结果:name=zhangsan path=/
print('{1}在{0}'.format('写代码','谢某人'))
或
print('{0}在{1}'.format('谢某人','写代码'))
结果:谢某人在写代码
3、填充和对齐^<>分别表示居中、左对齐、右对齐,后面带宽度
print('{:^30}'.format("zhangsan")) # 居中
print('{:>30}'.format("zhangsan")) # 右对齐
print('{:<30}'.format("zhangsan")) # 左对齐
30:字段长度(最左到最右之间的长度)
4、精度控制 :.nf
print('{:.2f}'.format(3.14159))
结果:3.14
保留两位小数,两位后四舍五入
print('{:.5f}'.format(3.14))
结果:3.14000
保留5位小数,不足补0.
进制转化,b o d x 分别表示二、八、十、十六进制
print('{:b}'.format(20))
print('{:o}'.format(20))
print('{:d}'.format(20))
print('{:x}'.format(20))
结果:
10100
24
20
14
5、 千位分隔符::,
print('{:,}'.format(100000000))
print('{:,}'.format(123456.123456))
结果:
100,000,000
123,456.123456
2、結合関数
これを使用して、文字列を連結し、文字列、タプル、およびリスト内の要素を指定された文字(区切り文字)で接続して、新しい文字列を生成できます。
list1 = ['1','2','3','4']
s = "-"
s = s.join(list1)
print(s)
输出:
1-2-3-4
用空字符连接
list1 = ['g','e','e','k', 's']
print("".join(list1))
输出:
geeks
三、交換機能
String.replace(old、new、count)は、文字列内の古い文字を新しい文字に置き換えます。countは置換の数です。
mystr4 = 'luobodazahui-haha'
print(mystr4.replace( 'haha'、 'good'))
出力
luobodazahui-良い
4、分割機能
文字列を切り取ってリストを取得します。
mystr5 = 'luobo、dazahui good'
スペースで分割
print(mystr5.split())
hで分割
print(mystr5.split( 'h'))
コンマで分割
print(mystr5.split( '、'))
出力
['luobo、dazahui'、 'good']
['luobo、daza'、 'ui good']
['luobo'、 'dazahui good']
リスト:
- スライス
同じ文字列
- 追加和拡張
リストに要素を追加する中国
mylist1 = [1、2]
mylist2 = [3、4]
mylist3 = [1、2]
mylist1.append(mylist2)
print(mylist1)
mylist3.extend(mylist2)
print(mylist3)
outout
[1、2、[3、4]]
[1、2、3、4]
- 要素を削除
del:添え字に従って削除
pop:最後の要素を
削除remove:要素の値に従って削除
mylist4 = ['a'、 'b'、 'c'、 'd']
del mylist4 [0]
print(mylist4)
mylist4.pop()
print(mylist4)
mylist4.remove( 'c')
print(mylist4)
output
['b'、 'c'、 'd']
['b'、 'c']
['b']
- 要素の並べ替え
sort:リストを特定の順序で再配置します。デフォルトは小さいものから大きいものへ、パラメータreverse = Trueは大きいものから小さいものへの逆の順序に変更できます。
逆:リストを逆にします。
mylist5 = [1、5、2、3、4]
mylist5.sort()
print(mylist5)
mylist5.reverse()
print(mylist5)
出力
[1、2、3、4、5]
[
5、4、3、2、1 ]辞書:
- 空の辞書
dict.clear()
dict1 = {'key1':1、 'key2':2}
dict1.clear()
print(dict1)
出力
{}
- 指定削除
popメソッドを使用して、辞書内のアイテムを削除するように指定します
dict1 = {'key1':1、 'key2':2}
d1 = dict1.pop( 'key1')
print(d1)
print(dict1)
出力
1
{'key2':2}
- 辞書を反復処理する
dict2 = {'key1':1、 'key2':2}
mykey = [dict2のキーのキー]
print(mykey)
myvalue = [dict2.values()の値の値]
print(myvalue)
key_value = [(k 、v)dict2.items()のk、vの場合]
print(key_value)
出力
['key1'、 'key2']
[1、2]
[( 'key1'、1)、( 'key2'、2)]
4. fromkeys
シーケンス内の要素をディクショナリのキーとして使用して、新しいディクショナリを作成するために使用されます。valueは、ディクショナリのすべてのキーに対応する初期値です。
キー= ['張飛'、 '関羽'、 '劉備'、 '趙雲']
dict.fromkeys(keys、0)
出力
{'張飛':0、 '関羽':0、 '劉備':0、 '趙雲':0}
3.Pythonでの文字列エンコーディングについて簡単に説明します
コンピュータの初期設計では、8ビットがバイトとして使用されていました。1バイトが表すことができる最大の整数は255です(2進数の11111111 = 10進数の255)。より大きな整数を表す場合は、より多くのバイトを使用する必要があります。
当初、コンピューターにはASCIIエンコードしかありませんでした。つまり、大文字と小文字の英語の文字、数字、および一部の記号しか含まれていませんでしたが、中国語や日本語などの他の言語では明らかに不十分でした。その後、Unicodeが発明されました。Unicodeはすべての言語を一連のエンコーディングに統合したため、文字化けの問題は発生しませんでした。ハードディスクに保存する必要がある場合、または転送する必要がある場合は、UTF-8エンコーディングに変換されます。UTF-8は、Unicodeに属する可変長のエンコード方式です。
Pythonでは、Unicodeでエンコードされた文字列は、encode()メソッドを使用して指定されたバイトにエンコードできます。または、バイトは、decode()メソッドを使用して文字列にエンコードできます。
4.ナインナインナインの九九を印刷します
for i in range(1,10):
for j in range(1,i+1):
print("%s*%s = %s"%(i,j,i*j),end="; ")
print()
5.オブジェクト指向における__new__とinitの違い
__new__は、インスタンスが作成される前に呼び出されます。これは、そのタスクがインスタンスを作成し、静的メソッドであるインスタンスオブジェクトを返すことであるためです。
__init__は、インスタンスオブジェクトが作成されるときに呼び出され、オブジェクトプロパティの初期値を設定します。これは通常、クラスインスタンスを初期化するために使用されます。インスタンスメソッドです。
1. __new__には、現在のクラスを表す少なくとも1つのパラメーターclsが必要です。このパラメーターは、インスタンス化されるときにPythonインタープリターによって自動的に認識されます。
2. __new__には、インスタンス化されたインスタンスを返すための戻り値が必要です。__new__を自分で実装する場合は、この点に特に注意する必要があります。親クラスを返すことができます(super(現在のクラス名、cls)を介して)__ new__インスタンス、または直接オブジェクトの__new__のインスタンス。
3. __init__には、この__new__によって返されるインスタンスであるパラメータselfがあります。__init__は__new__に基づいて他の初期化アクションを完了することができ、__ init__は戻り値を必要としません。
4. __new__が現在のクラスのインスタンスを作成すると、自動的に__init__関数が呼び出されます。returnステートメントで呼び出される__new__関数の最初のパラメーターはclsであり、現在のクラスのインスタンスであることを確認します。別の場合classクラスの名前。実際の作成と戻りは他のクラスのインスタンスです。実際、現在のクラスの__init__関数は呼び出されず、他のクラスの__init__関数も呼び出されません。
6.二分法検索機能を実現する
二分探索では、オブジェクトが正常である必要があり、その基本原則は次のとおりです。
1.配列の中央の要素から開始して、中央の要素が検索対象の要素である場合、検索プロセスは終了します。
2.特定の要素が中央の要素よりも大きいまたは小さい場合は、中央の要素よりも大きいまたは小さい配列の半分を検索し、最初と同じように中央の要素から比較を開始します。
3.特定のステップで配列が空の場合は、配列が見つからないことを意味します。
# 二分法查找
# 从列表test = [1,5,8,16,24,48,59,80]
def erfen(list_number,n):
begin = 0;
end = len(list_number)-1;
while begin <= end:
mid = (begin + end)//2;
if n > list_number[mid]:
begin = mid + 1;
else:
if n < list_number[mid]:
end = mid -1;
else:
print("第%s个数:"% (mid+1));
break;
test = [1,5,8,16,24,48,59,80,90];
print("总数列为:",test);
a = int(input("请输入查找的数:"));
erfen(test,a);
7.文字列のフォーマット方法
- %演算子を使用する
print("This is for %s" % "Python")
print("This is for %s, and %s" %("Python", "You"))
output
This is for Python
This is for Python, and You
- str.format
Python3では、この新しい文字列フォーマット方法が導入されました。
print("This is my {}".format("chat"))
print("This is {name}, hope you can {do}".format(name="zhouluob", do="like"))
output
This is my chat
This is zhouluob, hope you can like
- f-文字列
Python3-6では、この新しい文字列フォーマット方法が導入されました。
name = "luobodazahui"
print(f"hello {name}")
output
hello luobodazahui
#一个复杂些的例子:
def mytest(name, age):
return f"hello {name}, you are {age} years old!"
people = mytest("luobo", 20)
print(people)
output
hello luobo, you are 20 years old!
8.単純なAPIを実装します
フラスコを使用してWebサーバーを構築する
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['POST'])
def simple_api():
result = request.get_json()
return result
if __name__ == "__main__":
app.run()
9.フィボナッチ数列を実現します
フィボナッチ数列:黄金分割数列とも呼ばれ、次のような数列を指します:1、1、2、3、5、8、13、21、34、...
数学では、フィボナッチ数列は次のとおりです。再帰的に定義:F(1)= 1、F(2)= 1、F(n)= F(n-1)+ F(n-2)(n> = 2、n∈N*)
a,b = 1,1
lst = [1]
n = int(input("请输入第n个数:"))
for i in range(n-1):
lst.append(b)
a,b = b,a+b #关键在这句
print("第%s个数为:%s"%(n,a))
print(lst)
def fpnq(n):
i = 3;
j = 1;
b = 1;
# a = 2;
if n == 0:
print("cuowu");
elif n == 1:
print("1");
elif n == 2:
print("1,1")
else:
while(i <= n):
if i ==3:
print("1,1",end=',')
j,b = b,j+b;
# a = j + b;
# j = b;
# b = a;
print(b, end=',');
i = i + 1;
fpnq(10);
10.バブルソート
# 冒泡排序 arr = [9,7, 4, 3, 67, 34, 1, 8,42]
arr = [9,7, 4, 3, 67, 34, 1, 8,42];
print("排序前的数列:",arr);
def maopao(arr):
n = len(arr);
for i in range(0,n-1):
for j in range(0,n-1-i):
if arr[j] > arr[j+1]:
arr[j],arr[j+1] = arr[j+1],arr[j];
maopao(arr);
print("排序后的数列:",arr);
11.クイックソート
高速ソートのアイデア:最初に任意のデータ(通常は配列の最初の番号)をキーデータとして選択し、次にその前にそれよりも小さいすべての数値を配置し、その後にそれよりも大きいすべての数値を配置します。このプロセスは呼び出されますクイックソートしてから、両側のデータを再帰的にソートします。
ベンチマーク値の選択:「ピボット」と呼ばれるシーケンスから要素を選択します。
セグメンテーション:シーケンスを並べ替えます。ベンチマーク値よりも小さいすべての要素がベンチマークの前に配置され、ベンチマーク値よりも大きいすべての要素がベンチマークビハインド(参照値に等しい数はどちらの側にも行くことができます)。このセグメンテーションの終了後、参照値の並べ替えが完了しました。
サブシーケンスの再帰的な並べ替え:参照値よりも小さい要素のサブシーケンスと、参照値よりも大きい要素のサブシーケンスを再帰的に並べ替えます。
list1 = [9, 7, 4, 3, 67, 34, 1, 8, 42];
def partition(arr, low, high):
i = (low - 1) # 最小元素索引
pivot = arr[high]
for j in range(low, high):
# 当前元素小于或等于 pivot
if arr[j] <= pivot:
i = i + 1
arr[i], arr[j] = arr[j], arr[i]
arr[i + 1], arr[high] = arr[high], arr[i + 1]
return (i + 1)
def quicksort(arr, low, high):
if low < high:
pi = partition(arr, low, high)
quicksort(arr, low, pi - 1)
quicksort(arr, pi + 1, high)
quicksort(list1, 0, len(list1) - 1)
print(list1)