分类 Computer 下的文章

1. 运行方式

一种方式是启动Python,然后在命令窗口下直接输人相应的命令;另外一种就是将完整的代码写成.py脚本,如hello.py,然后通过python hello.py执行。在编写脚本的时候,可以添加适当的注释。在每一行中,可以用井号“#”来添加注释,如果注释有多行,可以在两个“'''”之间(3个英文的单引号)添加注释内容。如果脚本中带有中文(中文注释或者中文字符串,中文字符串要在前面u),那么需要在文件头注明编码,并且还要将脚本保存为UTF-8编码格式。

2. 基本命令

(1)基本运算

Python支持多重赋值。a,b,c=2,3,4 相当于a=2 b=3 c=4。Python支持对字符串的灵活操作,如:

S='I like python'
S+'very much' #得到'I like python very much'
S.split('') #将s以空格分割,得到列表['I','Iike','python']

(2)判断与循环

显然判断和循环是所有编程语言的基本命令,Python的判断语句如下。

if条件1:
    语句2
elif条件3:
    语句4
else:
    语句5

Python一般不用花括号,也没有end语句,它是用缩进对齐作为语句的层次标记。同一层次的缩进量要一一对应,否则报错。Python的循环也相应地有for循环和while循环,while循环如下。

s,k = 0
while k < 101:
    k = k + 1
    S = s + k
    print s

for循环如下。

S=0
    for k in range(101):
    S = S + k
    print s

in是一个非常方便、而且非常直观的语法,用来判断一个元素是否在列表/元组中,range用来生成连续的序列,一般语法为range(a,b,c),表示以a为首项、c为公差且不超过b-1的等差数列。

3. 函数


Python用def来自定义函数。

def add2(x):
    return x+2
print add2(1)

Python的函数返回值可以是各种形式,比如返回列表,甚至返回多个值。

def add2(x = 0,y = 0):#定义函数,同时定义参数的默认值
    return [x+2,y+2]  #返回值是-个列表
def add3(x,y):
    return x+3,y+3  #双重返回
a,b = add3(1,2) #此时a=4,b=5

Python支持用lambda对简单的功能定义“行内函数”。

f = lambda x:x + 2  #定义函数f(x)=x+2
g = lambda x,y:x+y  #定义函数g(x,y)=x+y

4. 数据结构


Python有4个内建的数据结构:List(列表)、Tuple(元组)、Dictionary(字典)以及Set(集合),它们可以统称为容器(container),因为它们实际上是一些“东西”组合而成的结构,而这些“东西”,可以是数字、字符甚至是列表,或者是它们之间几种的组合。通俗地讲,容器里是什么都行,而且容器里的元素类型不要求相同。

(1)列表/元组

列表和元组都是序列结构,从外形上看,列表是用方括号标记的,而元组是用圆括号标记的。访问列表和元组中的元素的方式都是一样的,如a[0]等于1,b[2]等于6等。容器里是什么都行,因此下面的定义也是成立的。

c = [1,'abc′,[1,2]]

从功能上看,列表可以被修改,而元组不可以。对于a= [1,2,3],那么语句a[0]=0,就会将列表a修改为[0,2,3],而对于元组b=(4,5,6),语句b[0]=1就会报错。要注意的是,如果已经有了一个列表a,同时想复制a,命名为变量b,那么b=a是无效的,这时候b仅仅是a的别名(或者说引用),修改b也会修改a。正确的复制方法应该是b=a[:]。与列表有关的函数是list,与元组有关的函数是tuple,它们的用法和功能几乎一样,都是将某个对象转换为列表/元组,如list('ab')的结果是['a','b'],tuple([1,2])的结果是(1,2)。

(2)字典

从数学上来讲,字典实际上是一个映射。它也相当于一个列表,然而它的“下标”不再是以0开头的数字,而是让自己定义的“键”(Key)开始。创建一个字典的基本方法为:

d={'today':20,'tomorrow':30}

这里的'today'、'tomorrow'就是字典的键,它在整个字典中必须是唯一的,而20、30就是键对应的值,访问字典中元素的方法也很直观。

d['today'] #该值为20
d['tomorrow']#该值为30

还有其他一些比较方便的方法来创建一个字典,如通过dict()函数转换,或者通过dict.fromkeys来创建,如下。

dict([['today',20],['tomorrow',30]]) #也相当于{'today':20,'tomorrow':30}
dict.fromkeys(['today','tomorrow'],20) #相当于('today':20,'tomorrow':20)

(3)集合

同数学上的集合概念基本上是一致的,它与列表的区别在于:1.它的元素是不重复的,而且是无序的;2.它不支持索引。一般我们通过花括号{}或者set()函数来创建一个集合。

s =(1,2,2,3)  #注意2会自动去重,得到{1,2,3}
s = set([1,2,2,3])  #同样,它将列表转换为集合,得到{1,2,3}

由于集合的特殊性(特别是无序性),因此集合有一些特别的运算。

a = t | s  #t和s的并集
b = t & s  #t和s的交集
c = t - s  #求差集(项在t中,但不在s中)
d = t ^ s  #对称差集(项在t或s中,但不会同时出现在二者中)

5.Numpy

构造Numpy

索引与切片

常见运算

数组规整

线性代数

爱因斯坦求和约定

6.Pandas

创建dataframe

import pandas as pd  # 用字典 dict 创建数据帧
dict_eg = {'Integer': [1, 2, 3, 4, 5],'Greek': ['alpha','beta','gamma','delta','epsilon']}
df_from_dict = pd.DataFrame(data=dict_eg)
df_from_dict2 = df_from_dict.set_index('Integer')

# 用列表 list 创建数据帧
list_fruits = [['apple', 11],['banana', 22],['cherry', 33],['durian', 44]]
df_list1 = pd.DataFrame(list_fruits)
df_list1.set_axis(['a', 'b', 'c', 'd'], axis='index')
df_list1.set_axis(['Fruit', 'Number'], axis='columns')
df_list2 = pd.DataFrame(list_fruits,columns=['Fruit', 'Number'],index = ['a', 'b', 'c', 'd'])

import numpy as np
np_array = np.random.normal(size = (10,4))
df_np = pd.DataFrame(np_array,columns=['X1', 'X2', 'X3', 'X4'])
data = [ ]  # 用 for 循环生成列表
for idx in range(10):
    data_idx = np.random.normal(size = (1,4)).tolist()
    data.append(data_idx[0])
df_loop = pd.DataFrame(data,columns = ['X1','X2','X3','X4'])

相关函数

iris_df.index
iris_df.columns
iris_df.axes
iris_df.values  #返回二维数组
iris_df.info  #获取数据帧摘要信息
iris_df.describe()  #生成数据帧统计摘要信息
iris_df.head()  #查看数据帧的前几行数据
iris_df.tail()  #查看数据帧的后几行数据
iris_df.shape  #获取数据帧的维度信息,返回一个元组
iris_df.size  #获取数据单元格总数

可视化

鸢尾花热点图

import numpy as np
import matplotlib.pyplot as plt 
import pandas as pd  
import seaborn as sns 
from sklearn.datasets import load_iris

X_df = pd.DataFrame(load_iris().data, columns=['X1','X2','X3','X4'])
fig, ax = plt.subplots(figsize = (3,4))
ax = sns.heatmap(X_df, cmap='RdYlBu_r', yticklabels=False)

ax = sns.clustermap(X_df,
                    cmap='RdYlBu_r',
                    yticklabels=False,
                    figsize = (3,6),
                    vmin=0, vmax=8)

2025-06-15T03:39:31.png

2人在线