list 和tuple 的经典引用案例

2024-04-26
-
-
from random import sample,randint,shuffle,uniform
from pyecharts.charts import Scatter  # pyecharts 如果没有需要通过 pip 安装
import pyecharts.options as opts

# 判断 list 内有没有重复元素
def is_duplicated(lst):
    for x in lst:
        if lst.count(x) > 1:
            return True
    return False


one = [1,-2,3,4,5,6,7,8,9,0]
print(is_duplicated(one))

def is_duplicateds(lst):
    return len(lst) != len(set(lst))

two = [1,-2,3,4,5,6,7,8,9,0,1]
print(is_duplicateds(two))

# 列表反转
def reverse(lst):
    return lst[::-1]
three = [1,-2,3,4,5,6,7,8,9,0]
print(reverse(three))

# 找出列表中的所有重复元素
def find_duplicate(lst):
    ret = []
    for x in lst:
        if lst.count(x) > 1 and x not in ret:
            ret.append(x)
    return ret
fore = [1,-2,3,4,5,6,7,8,9,0,5,3]
print(find_duplicate(fore))

# 斐波那契数列
# 普通版本
def fibonacci(n):
    if n <=1:
        return [1]
    fib = [1,1]
    while len(fib) < n:
        fib.append(fib[len(fib) - 1] + fib[len(fib) - 2] )
    return fib
fi = fibonacci(8)
print(fi)

# 生成器版本 使⽤ Python 的⽣成器,保证代码简洁的同时,还能节省内存:
def fibonaccis(n):
    a,b=1,1
    for _ in range(n):
        yield a     # 遇到 yield 返回,下次再进⼊函数体时,从 yield 的下⼀句开始执⾏
        a,b = b,a+b

fis = list(fibonaccis(10))
print(fis)

# 求出现频次最多的元素 以下只返回一个
def mode(lst):
    if not lst:
        return None
    return max(lst,key=lambda v:
               lst.count(v)) # v 在 lst 的出现次数作为⼤⼩⽐较的依据
lstOne = [1, 3, 3, 2, 1, 1, 2,3,5,3,3,3,3,3]
overLst = mode(lstOne)
print(overLst)

# 以下返回多个,相同多的元素
def modes(lst):
    if not lst:
        return None
    max_freq_elem = max(lst,key=lambda v: lst.count(v))
    max_freq = lst.count(max_freq_elem) # 出现最多次数
    ret = []
    for i in lst:
        if i not in ret and lst.count(i)==max_freq:
            ret.append(i)
    return ret

lstTwo = [1, 3, 3, 2, 1, 1, 2,3,5,3,3,3,3,3,1,1,1,1,1]
overLstt = modes(lstTwo)
print(f' 具有多个相同数量的元素是: {overLstt}')

# 更长列表 带有⼀个 * 的参数为可变的位置参数,意味着能传⼊任意多个位置参数。 key 函数定义怎么⽐较⼤⼩:lambda 的参数 v 是 lists 中的⼀个元素

def max_len(*lst):
    return max(*lst,key=lambda v: len(v)) # v 代表⼀个 list,其⻓度作为⼤⼩⽐较的依据

maxl = max_len([1,2,3,4],[4,5,6,7,3],[8,9])
print(f' 更长的列表是:{maxl}')

# 求第一个值 返回列表的第⼀个元素,注意列表为空时,返回 None。 通过此例,学会使⽤ if 和 else 的这种简洁表达

def head(lst):
    return lst[0] if len(lst) > 0 else None

print(f' 列表为空返回None:{head([])}')
print(f' 列表不为空的时候返回第一个值: {head([4,5,6,8])}')

# 求最后一个值
def head(lst):
    return lst[-1] if len(lst) > 0 else None

print(f' 列表为空返回None:{head([])}')
print(f' 列表不为空的时候返回最后一个值: {head([4,5,6,8])}')

# 元素对  没有理解这个的作用是什么
# t[:-1] :原列表切掉最后⼀个元素;
# t[1:] :原列表切掉第⼀个元素;
# zip(iter1, iter2) :实现 iter1 和 iter2 的对应索引处的元素拼接。

ls = list(zip([1,2],[2,3]))
print(f' 元素对是:{ls}')

# 生成相邻元素对
def pair(r):
    return list(zip(r[:-1],r[1:]))

pa = pair(range(15))
print(f'生成15个相邻元素对:{pa}')

# 样本抽样 内置 random 模块中,有⼀个 sample 函数,实现„抽样…功能。
# 从100个样本中,随机抽样10个
lstthree = range(150)
print(f'range返回的数据是:{lstthree}')
lstthree = [randint(0,50) for _ in range(100)]
print(f'生成100个整数:{lstthree}')
print(f'输出前5个数:{lstthree[:5]}')

lstthree_sample = sample(lstthree,10)

print(f'随机抽样10个数:{lstthree_sample}')

# 重洗数据集 内置 random 中的 shuffle 函数,能冲洗数据。值得注意,shuffle 是对输⼊列表就地(in place)洗牌,节省存储空间
lstFor = [randint(0,50) for _ in range(100)]
print(f' 重洗数据集生成100个整数:{lstFor}')

shuffle(lstFor)
print(f'重洗牌后的前5个数:{lstFor[:5]}')
print(f'重洗牌后的所有数:{lstFor}')

# ⽣成满⾜均匀分布的坐标点 random 模块,uniform(a,b) ⽣成 [a,b) 内的⼀个随机数。 借助列表⽣成式,⽣成 100 个均匀分布的坐标点。
x,y = [i for i in range(100)],[round(uniform(0,10),2) for _ in range(100)]
print(f'X的坐标点是:{x}')
print(f'Y的坐标点是:{y}')

# 使⽤ PyEcharts 绘图,版本 1.6.2。
def draw_uniform_points():
    x,y = [i for i in range(100)],[round(uniform(0,10),2) for _ in range(100)]
    print(y)
    c = (Scatter().add_xaxis(x).add_yaxis('y',y))
    c.render()

draw_uniform_points()

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

黄金_shmaur
不积跬步,无以至千里;不积小流,无以成江海
目录关闭