Python:列表

本文介绍了Python中的列表,包括基础知识如正序和倒序索引的使用,以及通过示例展示了列表的应用,如嵌套列表的创建和操作。此外,还提及了课程中涉及的相关知识点。

基础知识:

在Python中列表的索引可以是正序和倒序,正序第一个元素下标为0,倒序第一个元素下标为-1:

 

基础知识代码:

# 列表       可以存储所有类型变量

# 列表的创建  语法 变量名=[变量1,变量2,......]
list = ['a','b','c','d',1,2,3,4] #自定义列表
print(list)

list1 =[] #定义空列表
print(list1)

# 列表取值(索引)
list2 =['张三','李四','赵六','王五','赵六','钱七','孙八']
print(list2)
# 取值方法 :变量 = 列表变量[索引值]
zhaoliu=list2[3]
print(zhaoliu)

# 列表裁剪: 列表变量=原列表变量[起始索引:结束索引]
list3 =list[ 1 : 4 ]
print(list3)
print(list[-1])  # 倒序索引
# 在python中列表的取值范围是"左闭右开"

# 列表的index函数用于获得指定元素的索引值
zhaoliu_index = list2.index('赵六')  # 注意,index只会返回第一次出现元素的索引
print('赵六的出现位置在:',zhaoliu_index)

# 列表遍历 1 for
# 例1:for 迭代变量 in 可迭代对象i+=1
for p in list2:
    print('p是:',p)
# 例2:正序,倒序索引值
count=len(list2) # 获取列表长度
print("列表长度为:",count)
i=0
for p in list2:
    if p == '赵六':
        ri = count * -1 + i
        print( '元素:',p,'正序位置为:',i,'倒序位置为:',ri)
    i += 1

# 列表遍历 2 while
i = 0
while i < len(list2):
    p = list2[i]
    if p == '赵六':
        ri = count * -1 + i
        print('元素:', p, '正序位置为:', i, '倒序位置为:', ri)
    i += 1

# 列表的反转和排序
persons = ['a','b','c','d',1,2,3,4]

persons.reverse()                # reverse()方法进行列表的反转
print("反转后的列表为:",persons)

number=[3,2,4,6,1,2,3,7,4]
number.sort()                    # sort()方法进行列表的升序排列
print("升序排列列表为:",number)
number.sort(reverse=True)        # sort()方法进行列表的降序序排列
print("降序排列整理后的列表为:",number)


# 列表的新增,修改,删除操作
"""
list.append(新元素)                         :在列表末端追加新元素
list.insert(索引,新元素)                    :在制定索引插入新元素
list[索引]=新值                             :更新制定索引位置数据
list[起始索引:结束索引]=新列表               :更新指定范围数据
list.remove(元素)                           :删除制定元素
list.pop(索引)                              :按索引删除制定元素
"""
persons2=['张三','李四','赵六','王五','赵六','钱七','孙八']

# 列表的追加
persons2.append("杨九")
print(persons2)
persons2.insert(2,'刘二')
print(persons2)
persons2.insert(len(persons2),'猴十')
print(persons2)

# 列表的更新
persons2[2]='宋二'
print(persons2)
persons2[3:5]=['王五','李四']  # 范围更新:虽然是3~5有3个数,但是python是左闭右开设计,所以5的索引值并不包含字在内
print(persons2)

# 列表的删除
persons2.remove('宋二')  # 按元素名称删除 (移除)
print(persons2)
persons2.pop(4)      # 按索引值删除 (弹出)
print(persons2)
persons2[4:7]=[]     # 群删除
print(persons2)

# 其他用法
persons3=['张三','李四','赵六','王五','赵六','钱七','孙八']
# 统计出现次数
count=persons3.count('赵六')
print(count)
# 追加操作!!!
# append将一个对象追加到末尾,extend则是将列表中的元素追加到原始列表末尾
persons3.append(['杨九','吴十'])  # 添加对象:将整个列表对象追加到末尾(list允许增加任何类型的对象!)
print(persons3)
persons3.extend(['杨九','吴十'])  # 追加元素:将列表中的元素追加到末尾
print(persons3)

# in 成员运算符,用于判断数据是否在列表中存在,返回boolean
b = '张三' in persons3
print(b)

# 列表的复制
persons4=persons3.copy()         # 不是同一个对象
persons5=persons3                # 指向同一对象
print("复制后的列表4为:",persons4)

# is 身份运算符,判断两个变量是否指向同一个内存
print(persons4 is persons3)
print(persons5 is persons3)

# clear 用于清空列表
persons4.clear()
print(persons4)

运行结果:

 

列表的应用小程序:(嵌套列表

# 多维列表(嵌套列表)
# [[姓名,年龄,工资],[姓名,年龄,工资],[姓名,年龄,工资],[姓名,年龄,工资]]
# 字符串:"姓名,年龄,工资"例如: "张三,30,2000"
# str = "张三,30,2000"
# l = str.split(",")
# print(l)
emp_list = []
while True:
    info = input("请输入员工信息:")
    if info == "":
        print("程序结束")
        break
    info_list = info.split(",")
    if len(info_list) != 3:
        print("输入格式不正确,请重新输入")
        continue
    emp_list.append(info_list)
    # print(emp_list)

    for emp in emp_list:
        print("{n},年龄:{a},工资:{s}".format(n=emp[0],a=emp[1],s=emp[2]))

运行结果:

 

课程知识点:

 

内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析与算法验证,深入理解每一步的推理依据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值