嵌套列表,与摩尔投票进阶

这篇具有很好参考价值的文章主要介绍了嵌套列表,与摩尔投票进阶。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


title: “Python fishC 22” author: “hou wei” date: “2023-04-16” output: html_document

knitr::opts_chunk$set(echo = TRUE)

问答题


0.请问 == 运算符和 is 运算符有什么区别呢?

在Python中==运算符用于比较两个变量的值是否相等,而is运算符用于判断两个变量引用对象是否为同一个,即所引用的对象的内存地址是否一致。

1.请问下面代码的执行结果是?

[[1, 2, 3], [4, 5, 6]] + [7, 8, 9]

执行错误结果为[[1, 2, 3], [4, 5, 6], [7, 8, 9]],正确结果为[[1, 2, 3], [4, 5, 6], 7, 8, 9]

2.请问下面代码的执行结果是?

 len([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

执行结果为3,len()函数返回的是列表中元素的个数,而不是列表中所有元素的个数。

3.请问下面代码的结果是返回 True 还是 False 呢?

a = 250
b = 250
a is b

代码返回的是Ture,列表和字符串的存储方式是不同的。如果是列表的话,上面的返回结果就是FALSE。

4.请问下面代码的结果是返回 True 还是 False 呢?

a = 1000
b = 1000
a is b

这串代码的返回结果是FALSE。这是因为Python中,对于小整数和字符串,Python 会缓存这些对象,以便重复使用。在这种情况下,a和b引用的是相同的对象,因此 a isb 返回True。但是,对于大整数和大型字符串等对象,Python不会缓存它们,因此 a 和 b 引用的是不同的对象,a is b 返回 False。出于性能优化方面的考虑,Python 在内部为 -5~256 范围内的整数维护了一个数组,起到缓存的作用。

5.既然有二维列表,那么三维列表应该也是“同理可得”的东西,请大家尝试创建一个简单的三维列表吧?

先可以使用元素值来创建二维列表,还可以使用循环语句来创建二维列表。

matrix = [[1,2,3],[1,2,3],[1,2,3]]

A = [0]*3
for i in range(3):
  A[i] = [0]*3

列表推导式的方法如下

dp = [[[0 for i in range(3)] for j in range(3)] for k in range(3)]
dp

列表推导式是Python构建列表的一种快捷方式,可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表。列表推导式的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,其中包含符合条件的元素。

或者使用嵌套的for循环来创建三维列表

dp = []
for i in range(3):
    dp.append([])
    for j in range(3):
        dp[i].append([0] * 3)
dp

动动手


0. 请根据下面的内存关系图,分别创建出 x、y 和 z 三个不同的列表。

如下图:
嵌套列表,与摩尔投票进阶

x = [[0]*3]*3


y = [0]*3
for i in range(3):
  y[i] = [0]*3

z = []
for i in range(3):
    z.append([])
    for j in range(3):
        z[i].append([0] * 2)

x 
y
z

1.上一节的课后作业我们提到了“摩尔投票法”,这种方法尤其适用于在任意多的选项中找到数量占比最多的那一个。那么这一次我们修改一下要求,编写代码,利用“摩尔投票法”来找出占比数量最多的两个元素(注意:这两个元素的数量都需要超过总数的三分之一)。

看到题目我第一思路就是先将占比最多的找到,然后将其排除,再找到剩下元素占比最多的即可。

首先是对抗阶段,再是统计比较

nums = [2, 2, 4 , 2, 3, 4, 6, 2, 2]
major = nums[0]
count = 0  
for each in nums:
  if count == 0:
    major = each
  if each == major:
    count += 1
  else:
    count -= 1
      
if nums.count(major)> len(nums)/3:
    print("占比最多的第一个元素是:", major)
else:
    print("不存在占比最多的元素。")

我们可以思考,如果某个元素再序列里面大于1/3但是小于1/2,上面的代码将无法为我们找出对应正确的元素。所以第一思路也存在一定的问题。

我们带入两个元素进去就不会出现上面的问题啦。

def majorityElement(nums):
    candidate1 = nums[0]
    candidate2 = nums[0]
    count1 = 0
    count2 = 0
    for num in nums:
        if num == candidate1:
            count1 += 1
        elif num == candidate2:
            count2 += 1
        elif count1 == 0:
            candidate1 = num
            count1 = 1
        elif count2 == 0:
            candidate2 = num
            count2 = 1
        else:
            count1 -= 1
            count2 -= 1
    return [n for n in (candidate1, candidate2) if nums.count(n) > len(nums) // 3]

nums = [2, 2, 4 , 2, 3, 4, 6, 2, 4]
print("占比最多的两个元素分别是:",candidate1,candidate2)
      

同时也可以使用continue函数文章来源地址https://www.toymoban.com/news/detail-415946.html

nums = [1, 1, 2, 1, 3, 2, 3, 2]
    
major1 = major2 = nums[0]
count1 = count2 = 0
    
# 对抗阶段
for each in nums:
    if major1 == each:
        count1 += 1
        continue
    
    if major2 == each:
        count2 += 1
        continue
    
    if count1 == 0:
        major1 = each
        count1 = 1
        continue
    
    if count2 == 0:
        major2 = each
        count2 = 1
        continue
    
    count1 -= 1
    count2 -= 1
    
# 统计阶段
if nums.count(major1) > len(nums) / 3:
    print(major1)
if nums.count(major2) > len(nums) / 3:
    print(major2)

到了这里,关于嵌套列表,与摩尔投票进阶的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【python进阶】列表排序已经掌握?这种将变量插入列表序列的方法你该知道了

    🙋‍♂️作者简介:生鱼同学,大数据科学与技术专业硕士在读👨‍🎓,曾获得华为杯数学建模国家二等奖🏆,MathorCup 数学建模竞赛国家二等奖🏅,亚太数学建模国家二等奖🏅。 ✍️研究方向:复杂网络科学 🏆兴趣方向:利用python进行数据分析与机器学习,数学建模竞

    2023年04月08日
    浏览(43)
  • 【Python】进阶学习:列表推导式如何使用两个for循环

    【Python】进阶学习:列表推导式如何使用两个for循环 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分92+),分享更多关于深度学习、

    2024年03月17日
    浏览(66)
  • 基于微信评选投票小程序毕业设计作品成品(13)参赛列表和参赛排名接口

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月07日
    浏览(53)
  • Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分

    目录 341. 扁平化嵌套列表迭代器 Flatten Nested List Iterator  🌟🌟 343. 整数拆分 Integer Break  🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个嵌套的整数列表  nestedList  。每个元素要么是

    2024年02月16日
    浏览(46)
  • R语言 列表中嵌套列名一致的多个数据框如何整合为一个数据框

    在批量建模后容易得到list,list中的每个元素都是单个的tibble 或者 dataframe,如何将这些数据整合为一张表呢? 载入R包   模拟数据 我们发现有46个列表元素,且列名一致 以下是其中三个  予以整合 结果    

    2024年02月13日
    浏览(35)
  • 【Python】plt.title()函数

    plt.title() 是 matplotlib 库中用于设置图形标题的函数。 其中: label 是要设置的标题文本,可以是字符串类型或者是数学表达式。 fontdict 是一个可选的参数,用于设置标题的字体属性,例如字体名称、大小、颜色等。 loc 参数用于指定标题的位置,可以使用字符串(例如 ‘lef

    2024年02月07日
    浏览(46)
  • h5开发网站-使用jquery来实现二层嵌套的左侧列表,点击后显示右侧内容的效果

    使用jquery来实现二层嵌套的左侧列表,点击后显示右侧内容的效果。 为一级列表项和二级子列表项分别添加了点击事件处理程序。 当一级列表项被点击时,使用.slideToggle()方法展开或收起对应的二级子列表项。 当二级子列表项被点击时,使用event.stopPropagation()方法阻止事件冒

    2024年02月09日
    浏览(41)
  • python利用selenium获取网页head中的title

    工作中有批量获取网页head中title的应用场景,实践中遇到了一些问题,以此记录一下。 通过检查发现网页的head中的title确实有文本,但是使用selenium的driver.title提取到了空字符串’’ 接着使用driver.find_element(By.XPATH, ‘/html/head/title’).is_displayed(),得到False,说明title被隐藏了

    2024年02月13日
    浏览(45)
  • chatgpt赋能python:Title:Python编程中的空格怎么用?详细教程!

    Title: Python编程中的空格怎么用?详细教程! Introduction: Python编程的空格使用一直是令人困惑的话题之一,但它却是Python语言中非常重要的一部分。空格在Python程序中用来表示代码块的开始和结束,因此不同的空格使用方式可能会导致程序运行结果的不同。所以,对于Python程序

    2024年02月11日
    浏览(43)
  • python—matplotlib库系列学习(一):plot函数(包含title、xlabel、ylabel、legend函数)

    目录 引言 plot函数 (1)简单的举例说明 (2)参数说明          1. marker(标记样式字符串)          2. color(颜色)          3. linestyle 和 linewidth (3)一个简便的写法 (4)一个图上画多条线 (5)通用的图形的美化补充         1. 标题         2. x轴 -

    2024年02月07日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包