查找发生事件的forloop的值Python

2024-10-02 00:41:37 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿,伙计们,这太令人困惑了。。。在

我试图通过以下方法找到数组的最小值:

for xpre in range(100): #used pre because I am using vapor pressures with some x molarity
        xvalue=xarray[xpre]
        for ppre in range(100): #same as xpre but vapor pressures for pure water, p
            pvalue=parray[p]
            d=math.fabs(xvalue-pvalue) #d represents the difference(due to vapor pressure lowering, a phenomenon in chemistry)
            darray.append(d) #darray stores the differences
        mini=min(darray) #mini is the minimum value in darray
        darr=[] #this is to make way for a new set of floats

所有的数组(xarr、parr、darr)都已经定义好了。他们每人有100个浮子

所以我的问题是如何找到pvap和xvap@which min(darr)被找到?在

编辑 已经更改了一些变量名并添加了变量描述,对不起,伙计们


Tags: thetoinforrange数组mini伙计
2条回答

编辑:这不能回答操作员的问题:

min_diff, min_idx = min((math.fabs(a - b), i) for i, (a, b) in enumerate(zip(xpre, ppre)

从右到左:

zip接受xpre和ppre,并生成一个第1个、第2个。。。元素分别如下:

^{pr2}$

枚举枚举通过从0向上计数来添加索引:

[ (0 , (xpre[0],ppre[0]) ) , (1 , (xpre[1],ppre[1]) ) , ... ]

这将解压每个嵌套元组:

for i, (a, b) in ...

i是enumerate生成的索引,a和b是xarr和parr的元素。在

这将构建一个由差异和索引组成的元组:

(math.fabs(a - b), i)

在min(…)之间的整个过程是一个生成器表达式。然后min会找到这些值中的最小值,赋值将它们解包:

min_diff, min_idx = min(...)

有几件事:

  1. 尝试^{}
  2. 不要使用darr作为list,而是使用dict并将dvp值存储为键,xindexpindex变量作为值

这是密码

for xindex, xvalue in enumerate(xarr):
  darr = {}
  for pindex, pvalue in enumerate(parr):
    dvp = math.fabs(xvalue - pvalue)
    darr[dvp] = {'xindex': xindex, 'pindex': pindex}
  mini = min(darr.keys())
  minix = darr[mini]['xindex']
  minip = darr[mini]['pindex']
  minindex = darr.keys().index(mini)


  print "minimum_index> {0}, is the difference of xarr[{1}] and parr[{2}]".format(minindex, minix, minip)
  darr.clear()

说明

enumerate函数允许您迭代列表并接收项的索引。它是您的range(100)的替代品。注意,我没有在索引xpreppre处获取值的行,这是因为enumerate函数将索引和值都作为元组提供给我。在

然而,最重要的变化是,您的darr不是这样的列表:

^{pr2}$

它现在是这样一本词典:

{
  130: {'xindex': 1, 'pindex': 4},
  18: {'xindex': 1, 'pindex': 6},
  43: {'xindex': 1, 'pindex': 9},
  ...
}

现在,我不再仅仅存储dvp值,而是将索引存储到生成这些dvp值的x和{}中。现在,如果我想知道什么,比如说,哪个x和{}值产生了43的dvp值?我会这样做:

xindex = darr[43]['xindex']
pindex = darr[43]['pindex']
x = xarr[xindex]
p = parr[pindex]

现在,x和{}是有问题的值。在

注意我个人会存储产生特定dvp的值,而不是这些值的索引。但你要的是指数,所以我给了你答案。我假设您有理由这样处理索引,但在Python中,当您以Python方式编程时,通常不会发现自己以这种方式处理索引。这是一种非常C的做事方式。在

相关问题 更多 >

    热门问题