Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在另一个循环中调用时的Python循环行为_Python_Numpy - Fatal编程技术网

在另一个循环中调用时的Python循环行为

在另一个循环中调用时的Python循环行为,python,numpy,Python,Numpy,我创建了一个python函数,该函数包含一个for循环,该循环与if语句相结合,用于迭代数组中的每个元素,以查找字符串中包含的单词“Urban”,如果找到该单词,则返回一个正索引,否则,如果字符串中不存在该值,则返回-1。 下面是一个输出示例: abc = np.array(crew_data['Vegetation Area']) print(abc) -1 2 -1 10 10 10 在此之后,循环继续执行以下if语句: if abc == -1: abc = str('Rural

我创建了一个python函数,该函数包含一个for循环,该循环与if语句相结合,用于迭代数组中的每个元素,以查找字符串中包含的单词“Urban”,如果找到该单词,则返回一个正索引,否则,如果字符串中不存在该值,则返回-1。 下面是一个输出示例:

abc = np.array(crew_data['Vegetation Area'])
print(abc)
-1
 2 
-1
10
10
10
在此之后,循环继续执行以下if语句:

if abc == -1:
  abc = str('Rural')
elif abc != -1:
  abc != str('Urban')
return(abc)
这里发生的事情是,根据数组迭代的结果,任何返回值-1的结果都会被分配字符串值'Rural',任何不等于-1的结果都会被分配字符串值'Urban'。以下是打印时的结果:

 print(abc)
 Rural
 Urban
 Rural
 Urban
 Urban
 Urban
如示例所示,调用时函数执行循环和if语句,并根据需要返回结果,但是当在另一个for循环中调用此函数时,结果会发生变化,并且循环(有问题)似乎会继续重复并产生错误的结果。起初,我认为这可能是由于使用了在后来的for循环中使用的相同的I迭代器,所以我将迭代器值更改为x,但没有任何更改

请注意,后面提到的for循环(代码未显示)调用了许多不同的函数,没有问题,但是,这是唯一包含for循环的函数

是否有任何其他控件需要集成到函数中,以允许它在稍后的for循环中正确执行

仅供参考,以下是本问题中引用的功能代码:

def area_type():
  abc= np.array(crew_data['Vegetation Area'])
  for x in abc:
      abc = x.find('Urban') 
      if abc == -1:
          abc = str('Rural')
      elif abc != -1:
          abc = str('Urban')
      return abc
以下是转换值之前原始数组的输出:

 'V-Wellington 906' 'V-Wellington 906' 'V-Urban Narromine 530_1'
 'V-Tumbarumba - 78545 - Taradale' 'V-Tumut - Urban Batlow'     
 'V-Tumut - Urban Batlow' 'V-Tumut - Urban Batlow'
 'V-Tumut - Urban Batlow' 'V-Tumut - Urban Batlow'
 'V-Tumut - Urban Batlow' 'V-Tumut - Urban Batlow'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 3'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 3'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumut - 78245+78244+78240 - Back Kunama' 'V-Tumut - Urban Batlow'
 'V-Tumut - Urban Batlow' 'V-Tumut - Urban Batlow'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumut - 78245+78244+78240 - Back Kunama'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 - Ournie Feeder C'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 - Ournie Feeder C'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 - Ournie Feeder C'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumut - 78245+78244+78240 - Back Kunama'
 'V-Tumut - 78245+78244+78240 - Back Kunama'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumut - 78245+78244+78240 - Back Kunama'
 'V-Tumbarumba - 78510 - Ournie Feeder C'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumut - 78245+78244+78240 - Back Kunama'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78514 - Jingellic' 'V-Tumbarumba - 78514 - Jingellic'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78514 - Jingellic' 'V-Tumbarumba - 78514 - Jingellic'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B'
 'V-Tumbarumba - 78514 - Jingellic'
 'V-Tumbarumba - 78510 + 78513 - Ournie Feeder B' 'V-Tumut - Urban Batlow'
 'V-Tumut - Urban Batlow' 'V-Tumbarumba - 78520 + 78521 - Tooma Part 2'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78540 +78547 - Laurel Hill'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumbarumba - 78520 + 78521 - Tooma Part 1'
 'V-Tumut - 78316 - Talbingo' 'V-Tumut - Urban Talbingo'
 'V-Tumut - 78316 - Talbingo' 'V-Tumut - 78316 - Talbingo'
 'V-Tumut - 78316 - Talbingo' 'V-Tumut - 78316 - Talbingo'
 'V-Tumut - 78316 - Talbingo'
 'V-Gundagai - 78440+78442+78444 - Tumblong Part 2'
 'V-Gundagai - 78440+78442+78444 - Tumblong Part 2'
 'V-Gundagai - 78440+78442+78444 - Tumblong Part 2'
 'V-Gundagai - 78440+78442+78444 - Tumblong Part 2'
 'V-Tumbarumba - 78510+78511+78512 - Ournie Feeder A'
 'V-Tumbarumba - 78510+78511+78512 - Ournie Feeder A']

此数组从导入的csv文件的列中提取,该列存储为数据帧。本文介绍的函数需要遍历该数组,搜索单词urban,返回索引或布尔值,将该值转换为urban或Rural,然后返回,并在稍后的循环中调用,以填充空数据框中的范围,然后将其导出为csv,准备导入到另一个数据库中

您在第一个循环中调用一个无条件返回的毯子,只返回第一个结果。记住,return退出函数!

然而,有一个相当简单的方法来实现这一点。如果您似乎正在传递一个数组,则可能需要将结果作为列表返回。我已经将我的数据集设置为列表,因为您没有提供数组的示例

abc = ['Urban', '1', '2', '3', '5', 'Urban']
result = ['Urban' if value.find('Urban') != -1 else 'Rural' for value in abc]

result
['Urban', 'Rural', 'Rural', 'Rural', 'Rural', 'Urban']

这可能是阅读
return
yield
以及
列表理解
的绝佳机会

不要在abc中为x指定
,然后重新分配abc,bad JOOJOOO循环中的无条件
return
语句会使循环毫无意义-只会发生一次迭代。这似乎是一个错误。解释您试图实现的目标可能更好,因为看起来您实际上需要使用
np.where()
解决方案,但是很难说
elif
中的条件与
中的条件正好相反,如果
条件,您应该使用
其他:
abc!=str('Urban')
没有任何用处。它将
abc
与(不必要的浇铸字符串)
'Urban'
进行比较,但会丢弃结果,因为您不需要对其进行任何处理。我将如何以及在何处添加收益率,以替代收益率?我这样做了,结果显示“TypeError:generator类型的对象没有len()。这个错误意味着什么?这是不是需要采取正确的方法来实现,毕竟这可以通过一个字典和一个映射值并返回结果的函数来解决。我之所以提到
yield
,也是因为它是从函数返回结果的另一种方法。可能不是你在这里寻找的答案。您可以使用上面的代码,并
返回
列表以实现所需。我刚刚更新了我的问题,以包括原始的arrayA问题,我所做的是,当在第二个循环内调用函数并导出数据帧时,传递到第二个循环并导出到csv文件的唯一结果是,城市是省略的,这似乎不是那么直接或简单。我已经解决了这个问题,只需在csv文件中添加一个面积列,并使用以下公式对字符串值执行搜索:=IFERROR(如果(搜索(“城市”,P2),“城市”),“农村”)