|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 2OLEGEND 于 2018-3-20 11:12 编辑
有这样一个循环,每次都向列表中添加元素,跳出循环的条件是:第i次添加完成后的列表和第i + 1次添加完成后的列表完全一样,则跳出循环。对于这样的循环条件,如何实现跳出循环?我比较笨,写了个while语句,但是效率很低,请各位老师帮忙!谢谢!
- import pandas as pd
- import openpyxl
- data = pd.read_excel('bonds-1.xlsx')
- #print(data)
- def f1(n):
- list1 = []
- list3 = []
-
- for k in range(0, 4):
- if data.iat[n, k] != 0:
- list1.append(data.iat[n, k])
- list1.append(n)
- list3 = list(set(list1))
- list1 = []
- return list3
- #print(f1(1))
- def f2(list_n):
- list1 = []
- list2 = []
- j = 0
- for i in list_n:
- a = f1(i)
-
- list1.extend(a)
- list2 = list(set(list1))
-
- while j < 100:
-
-
- for i in list2:
- a = f1(i)
-
- list1.extend(a)
- list2 = list(set(list1))
-
- j += 1
-
- return list2
- wb = openpyxl.load_workbook('456.xlsx')
- ws = wb.get_active_sheet()
- #print(sheet)
- d1 = []
- for i in range(1, 6):
- if i in d1:
- i += 1
- else:
-
- c = f1(i)
- d = f2(c)
- d.sort()
- ws.append(d)
- d1.extend(d)
- wb.save('456.xlsx')
- print(d)
- d1.sort()
- 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中,并保存。
求助这样的循环跳出语句该怎样写?
|
|