鱼C论坛

 找回密码
 立即注册
查看: 950|回复: 5

如何跳出循环语句?

[复制链接]
发表于 2018-3-20 10:49:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 2OLEGEND 于 2018-3-20 11:12 编辑

有这样一个循环,每次都向列表中添加元素,跳出循环的条件是:第i次添加完成后的列表和第i + 1次添加完成后的列表完全一样,则跳出循环。对于这样的循环条件,如何实现跳出循环?我比较笨,写了个while语句,但是效率很低,请各位老师帮忙!谢谢!

  1. import pandas as pd
  2. import openpyxl



  3. data = pd.read_excel('bonds-1.xlsx')
  4. #print(data)
  5. def f1(n):
  6.     list1 = []
  7.     list3 = []
  8.    
  9.     for k in range(0, 4):
  10.         if data.iat[n, k] != 0:
  11.             list1.append(data.iat[n, k])
  12.             list1.append(n)
  13.             list3 = list(set(list1))
  14.     list1 = []
  15.     return list3

  16. #print(f1(1))
  17. def f2(list_n):

  18.     list1 = []
  19.     list2 = []

  20.     j = 0            
  21.     for i in list_n:
  22.         a = f1(i)
  23.         
  24.         list1.extend(a)
  25.         list2 = list(set(list1))
  26.    
  27.     while j < 100:
  28.         
  29.         
  30.         for i in list2:
  31.             a = f1(i)
  32.         
  33.             list1.extend(a)
  34.             list2 = list(set(list1))
  35.         
  36.         j += 1

  37.    
  38.     return list2




  39. wb = openpyxl.load_workbook('456.xlsx')
  40. ws = wb.get_active_sheet()
  41. #print(sheet)
  42. d1 = []
  43. for i in range(1, 6):
  44.     if i in d1:
  45.         i += 1
  46.     else:
  47.   
  48.         c = f1(i)
  49.         d = f2(c)
  50.         d.sort()
  51.         ws.append(d)
  52.         d1.extend(d)
  53.         wb.save('456.xlsx')
  54.         print(d)
  55. d1.sort()
  56. print(len(d1))
复制代码


附件不能传xlsx格式的,我将数据保存为txt格式。
这个程序的主要意思就是,找相关性。
第一步,将其读成数组格式,则第1行的值为[2 578 1358 0]
                                          第2行的值为[1 7 2238 3]
                                          等等。
第二步,函数f1的意思就是传入参数n,返回第n行所在非零值及行数,例如n = 1,则返回list3 = [1, 2, 578, 1358] ,如果n = 2, 则返回[1 , 2, 3, 7, 2238],其他类似
第三步,函数f2,是将f1中所返回的列表做为参数,将其中的每一个值再次带入f1中,返回列表list2,再次将list2带入f1中,一直执行该循环直到第i次添加完成后的列表和第i + 1次添加完成后的列表完全一样,则跳出循环。我是用的while语句判断的,当数据较小时,还行,数据很大时效率很低。
第四步,对bonds-1中的每一个行值进行循环,分别调用f1,f2,并将f2中返回的列表list2写入excel中,并保存。

求助这样的循环跳出语句该怎样写?

bonds-1.txt

55.17 KB, 下载次数: 1

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-20 10:55:13 | 显示全部楼层
list1 、list2内容是什么?贴出来啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-20 10:57:59 | 显示全部楼层
tifa2018 发表于 2018-3-20 10:55
list1 、list2内容是什么?贴出来啊

这是个比较复杂的过程,我再开一个帖子吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 11:00:50 | 显示全部楼层
先添加判断是否相等,满足条件break  break看好缩进
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 11:01:32 | 显示全部楼层
写判断条件,然后满足就break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-20 11:11:51 | 显示全部楼层
南城顾她 发表于 2018-3-20 11:00
先添加判断是否相等,满足条件break  break看好缩进

就是判断不会写啊,第i次的列表怎么和第i + 1次的列表进行判断啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 19:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表