鱼C论坛

 找回密码
 立即注册
查看: 1304|回复: 17

[已解决]for循环判断

[复制链接]
发表于 2018-11-12 21:26:15 | 显示全部楼层 |阅读模式

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

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

x
TEM1=
[
[1,5262,5265,5266,5267,14717,14716,14715,14719,14718,14720],
[2,5262,5267,5268,5269,14719,14722,14721,14724,14723,14725],
[3,5262,5265,5269,5270,14717,14726,14724,14728,14727,14729],
[4,5262,5271,5272,5266,14732,14731,14730,14715,14733,14734],
[5,5262,5273,5271,5265,14736,14735,14732,14717,14737,14738]
]

TEM2=
[
[42,5262,5271,5272,5266,14732,14731,14730,14715,14733,14734],
[74,5262,5267,5268,5269,14719,14722,14721,14724,14723,14725],
[17,5262,5265,5266,5267,14717,14716,14715,14719,14718,14720],
[32,5262,5265,5269,5270,14717,14726,14724,14728,14727,14729],
[57,5262,5273,5271,5265,14736,14735,14732,14717,14737,14738]
]
如上面数据,每一行十一个数据,两个列表每一行的第一个数据不同,怎样实现当后面数据相同时,把TEM2每一行的第一个数字替换为TEM1中相对应的第一个数据 ,

求大佬给个程序参考啊。。。    用for循环迭代或者其他想法 ?   急求师兄师姐带一下    笔芯!!!
最佳答案
2018-11-14 00:48:36
以前的那个代码是针对TEM1和TEM2同行且同元素之间的比较,
现在的需求是要进行不同行但同元素间的比较。
那这个代码就得重写了:
for i in range(len(TEM1)): #这个循环控制TEM1每一个元素都和整个TEM2作比较
    tem1-r = TEM1[i]
    for j in range(len(TEM2)):
        tem2-r = TEM[j]
        for k in range(1,11):#这个循环判断比较的两个列表元素里面的元素是否相同
            if tem1-r[k] != tem2-r[k]:
                break;
            else:
                tem1-r[0] != tem2-r[0]:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-12 21:34:32 | 显示全部楼层
for i in range(1,6):
        for j in TEM2:
                TEM2[i-1][0]=i
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-12 21:34:37 | 显示全部楼层
TEM1=[
[1,5262,5265,5266,5267,14717,14716,14715,14719,14718,14720],
[2,5262,5267,5268,5269,14719,14722,14721,14724,14723,14725],
[3,5262,5265,5269,5270,14717,14726,14724,14728,14727,14729],
[4,5262,5271,5272,5266,14732,14731,14730,14715,14733,14734],
[5,5262,5273,5271,5265,14736,14735,14732,14717,14737,14738]
]

TEM2=[
[42,5262,5271,5272,5266,14732,14731,14730,14715,14733,14734],
[74,5262,5267,5268,5269,14719,14722,14721,14724,14723,14725],
[17,5262,5265,5266,5267,14717,14716,14715,14719,14718,14720],
[32,5262,5265,5269,5270,14717,14726,14724,14728,14727,14729],
[57,5262,5273,5271,5265,14736,14735,14732,14717,14737,14738]
]
TEM2=[x for y in TEM2 for x in TEM1 if x[1:]==y[1:]]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-12 21:38:48 | 显示全部楼层
i=1
for j in TEM2:
        TEM2[i-1][0]=i
        i+=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-12 22:35:46 | 显示全部楼层
判断两个点:1.这个列表有行又有列,所以用循环就一定会有两个;2.你比较的是每行下标1开始到结束的元素
for i in range(6): #行
  x = TEM1[i]
  y = TEM2[i]
  for j in range(1,11):  #列
    if x[j] == y[j]   #判断后面
      y[0] = x[0]    #替换
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-12 22:50:21 | 显示全部楼层
TEM1=[
[1,5262,5265,5266,5267,14717,14716,14715,14719,14718,14720],
[2,5262,5267,5268,5269,14719,14722,14721,14724,14723,14725],
[3,5262,5265,5269,5270,14717,14726,14724,14728,14727,14729],
[4,5262,5271,5272,5266,14732,14731,14730,14715,14733,14734],
[5,5262,5273,5271,5265,14736,14735,14732,14717,14737,14738]
]

TEM2=[
[42,5262,5271,5272,5266,14732,14731,14730,14715,14733,14734],
[74,5262,5267,5268,5269,14719,14722,14721,14724,14723,14725],
[17,5262,5265,5266,5267,14717,14716,14715,14719,14718,14720],
[32,5262,5265,5269,5270,14717,14726,14724,14728,14727,14729],
[57,5262,5273,5271,5265,14736,14735,14732,14717,14737,14738]
]
for i in TEM2:
    for b in TEM1:
        if b[1:] == i[1:]:
            i[0] = b[0]
print(TEM2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-13 16:40:00 | 显示全部楼层

你好,当我从文件里读取出上万行数据进行运算时, 为什么程序运行没有结果的,程序也没有报错,就是没有输出 我是在python  idle 上运行的   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-13 16:42:05 | 显示全部楼层
前路 发表于 2018-11-12 22:35
判断两个点:1.这个列表有行又有列,所以用循环就一定会有两个;2.你比较的是每行下标1开始到结束的元素
f ...

你好,  如果TEM2有8000数据, TEM1有15000数据,只查找替换TEM2中数据,怎么对range更改呢  谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-13 16:54:08 | 显示全部楼层
尹风 发表于 2018-11-13 16:42
你好,  如果TEM2有8000数据, TEM1有15000数据,只查找替换TEM2中数据,怎么对range更改呢  谢谢

用fox x in TEM2
for y in TEM1就不用关心有多少数据了啊

按3楼的推导式就可以解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-13 19:59:12 | 显示全部楼层
喜欢吃菠菜 发表于 2018-11-13 16:54
用fox x in TEM2
for y in TEM1就不用关心有多少数据了啊

你好哦   我的程序就是这样
for i in TEM2:
    for b in TEM1:
        if b[1:] == i[1:]:
            i[0] = b[0]
但是也没有结果, 数据一大就运行无结果,是不是我用的编辑器 python idle 不行呢?   内存不足这样子 QAQ
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-13 20:10:19 | 显示全部楼层

班导师你好, 我用这个程序也试了一下上万行数据的运算, 也没有得到结果,  是不是因为在python idle 上运行不出来呢?    QAQ
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-13 20:12:51 | 显示全部楼层
尹风 发表于 2018-11-13 20:10
班导师你好, 我用这个程序也试了一下上万行数据的运算, 也没有得到结果,  是不是因为在python idle 上 ...

你还有别的IDE么,试试,的确内容大看了占内存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-13 20:35:16 | 显示全部楼层
本帖最后由 喜欢吃菠菜 于 2018-11-13 20:43 编辑
尹风 发表于 2018-11-13 19:59
你好哦   我的程序就是这样
for i in TEM2:
    for b in TEM1:


数据很多吗?
你在i[0]=b[0]下面加一个
break#注意这个break要加在第二个循环下面,不能跳出第一个循环
应该会快很多的

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

使用道具 举报

发表于 2018-11-13 20:38:28 | 显示全部楼层
尹风 发表于 2018-11-13 19:59
你好哦   我的程序就是这样
for i in TEM2:
    for b in TEM1:

还想更快的话
可以添加numba库,也许能让内存节省不少
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-14 00:48:36 | 显示全部楼层    本楼为最佳答案   
以前的那个代码是针对TEM1和TEM2同行且同元素之间的比较,
现在的需求是要进行不同行但同元素间的比较。
那这个代码就得重写了:
for i in range(len(TEM1)): #这个循环控制TEM1每一个元素都和整个TEM2作比较
    tem1-r = TEM1[i]
    for j in range(len(TEM2)):
        tem2-r = TEM[j]
        for k in range(1,11):#这个循环判断比较的两个列表元素里面的元素是否相同
            if tem1-r[k] != tem2-r[k]:
                break;
            else:
                tem1-r[0] != tem2-r[0]:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-14 01:43:32 From FishC Mobile | 显示全部楼层
尹风 发表于 2018-11-13 16:40
你好,当我从文件里读取出上万行数据进行运算时, 为什么程序运行没有结果的,程序也没有报错,就是没有 ...

我用的是jupyter notebook
数据量少是可以运行,打印出来
大的话,我个人做法一般是把数据生成新的一个文件
或者是存入数据库。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-20 20:28:09 | 显示全部楼层
前路 发表于 2018-11-14 00:48
以前的那个代码是针对TEM1和TEM2同行且同元素之间的比较,
现在的需求是要进行不同行但同元素间的比较。
...

你好,  这个程序是怎么判断列表元素相同后替换第一个数字的呢    谢谢啦 QAQ
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-21 21:51:20 | 显示全部楼层
尹风 发表于 2018-11-20 20:28
你好,  这个程序是怎么判断列表元素相同后替换第一个数字的呢    谢谢啦 QAQ

for k in range(1,11):#这个循环判断比较的两个列表元素里面的元素是否相同,
我这的方法是将TEM里面的每个元素给一个临时列表 i ,然后通过对 i 进行range(1,11)读取然后比较相同就替换掉i[0],也就是第一位!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 04:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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