Python将修改后的列表带到循环之外

时间:2018-07-09 17:19:57

标签: python list for-loop tuples

我一直在努力制作元组列表并找到每个元组的平均值。

myList = [(1,2,3),(4,12,6)]
def GS(myList):
     for miniList in myList:
          r = miniList[0]
          g = miniList[1]
          b = miniList[2]
          GS = round((r+g+b)/3,2)
          miniList = list(miniList)
          miniList[0] = GS
          miniList[1] = GS
          miniList[2] = GS
          miniList = tuple(miniList)
     return myList     

 print(GS(myList))

我的名单是[(1,2,3),(4,12,6)]

我应该获取每个元组的平均值,并替换三个元组

输出:[(2.0,2.0,2.0),(7.33,7.33,7.33)]

3 个答案:

答案 0 :(得分:3)

您可以使用列表推导。下面是一个示例,该示例避免通过bttn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String str = bttn1.getText().toString(); Intent i=new Intent(DetailSecreen.this,CodSecreen.class); startActivity(i); } }); add_custom_command(TARGET ${projectName} POST_BUILD COMMAND cmd /c ${PROJECT_CONFIGURATION}/shadercopy.bat) 迭代器两次计算每个元组的长度。

map

如果希望舍入小数,可以使用:

zip

答案 1 :(得分:2)

myList = [(1,2,3),(4,12,6)]
[(round(sum(e)/len(e)),)*len(e) for e in myList]
# [(2.0, 2.0, 2.0), (7.33, 7.33, 7.33)]

答案 2 :(得分:1)

问题在于,在您的for循环中,您编写:

 for miniList in myList:
     # ...
     miniList = tuple(miniList)

您在这里似乎想通过引用分配。但这在Python中是不可能的(或者至少不能使用这种语法)。

但是,您可以使用例如索引,并执行以下操作:

def GS(myList):
     for idx, miniList in enumerate(myList):
          r = miniList[0]
          g = miniList[1]
          b = miniList[2]
          GS = round((r+g+b)/3,2)
          miniList = list(miniList)
          miniList[0] = GS
          miniList[1] = GS
          miniList[2] = GS
          myList[idx] = tuple(miniList)
     return myList

话虽如此,这是一种相当复杂的方法。例如,您可以使用:

def GS(myList):
     for idx, miniList in enumerate(myList):
          miniList[idx] = (round(sum(miniList)/len(miniList), 2),) * len(miniList)
     return myList

这也适用于包含多于或少于三个元素的元组。我们要做的是计算sum(..)的{​​{1}},然后将其除以miniList的{​​{1}}以得到平均值。然后,像原始函数一样使用len(..)函数。

接下来,我们用miniList将其包装在单元组中,然后将其乘以元组的长度,得到一个元组,在其中重复单例中的元素元组round(.., 2)次。

话虽这么说,通常 Pythonic 构造一个 new 列表,然后更改一个现有列表。由于其他变量可能会引用此列表,因此现在也会进行更新。