GVKun编程网logo

python将值分配给循环中的列表元素(python将循环得到的数据放入列表)

7

以上就是给各位分享python将值分配给循环中的列表元素,其中也会对python将循环得到的数据放入列表进行解释,同时本文还将给你拓展numpy:将值分配给带有索引列表的2d数组、Pythonfor循

以上就是给各位分享python将值分配给循环中的列表元素,其中也会对python将循环得到的数据放入列表进行解释,同时本文还将给你拓展numpy:将值分配给带有索引列表的2d数组、Python for循环中添加字典到列表,结果列表中全是循环中的最后一个值、Python While循环中的分配条件、python – 列表中元素的顺序是否会导致for循环中的错误?等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

python将值分配给循环中的列表元素(python将循环得到的数据放入列表)

python将值分配给循环中的列表元素(python将循环得到的数据放入列表)

这是有效的python行为吗?我认为最终结果应为[0,0,0],并且id()函数每次迭代应返回相同的值。如何使其成为pythonic,而不使用枚举或范围(len(bar))?

bar = [1,2,3]print barfor foo in bar:    print id (foo)    foo=0    print id(foo)print bar

输出:

[1, 2, 3]516966451696765169652516967651696405169676[1, 2, 3]

答案1

小编典典

首先,您不能重新分配循环变量-可以,但是,这不会更改您要遍历的列表。因此,设置foo =0将不会更改列表,而只会更改局部变量foo(该变量恰好包含每次迭代开始时的迭代值)。

接下来,小数字(例如0和)1内部保存在小整数对象的池中(这是CPython实现的细节,不必是这种情况!)这就是为什么在foo为其分配ID后,ID相同的原因0。id基本上0是池中该整数对象的id

如果要在遍历列表时更改列表,很不幸,您将不得不按索引访问元素。因此,如果要保持输出不变,但[0, 0, 0]最后要保留输出,则必须遍历索引:

for i in range(len(bar)):    print id(bar[i])    bar[i] = 0    print id(bar[i])print bar

否则,这实际上是不可能的,因为一旦将列表的元素存储在变量中,就会有一个单独的引用,该引用未链接到存储在列表中的元素。并且由于大多数这些对象都是不可变的,并且在为变量分配新值时创建了一个新对象,因此您将无法获取列表的引用进行更新。

numpy:将值分配给带有索引列表的2d数组

numpy:将值分配给带有索引列表的2d数组

我有2d的numpy数组(想想灰度图像)。我想为该数组的坐标列表分配某些值,例如:

img = np.zeros((5, 5))coords = np.array([[0, 1], [1, 2], [2, 3], [3, 4]])def bad_use_of_numpy(img, coords):    for i, coord in enumerate(coords):        img[coord[0], coord[1]] = 255    return imgbad_use_of_numpy(img, coords)

这行得通,但是我觉得我可以利用numpy功能来使其更快。以后我可能还会有一个用例,如下所示:

img = np.zeros((5, 5))coords = np.array([[0, 1], [1, 2], [2, 3], [3, 4]])vals = np.array([1, 2, 3, 4])def bad_use_of_numpy(img, coords, vals):    for coord in coords:        img[coord[0], coord[1]] = vals[i]    return img bad_use_of_numpy(img, coords, vals)

有没有更向量化的方法呢?

答案1

小编典典

我们可以将coordsas的每一行拆开img,然后将col索引拆包以建立索引,然后进行分配。

现在,由于该问题被标记为:Python 3.x,因此我们可以简单地将其解压缩,[*coords.T]然后分配-

img[[*coords.T]] = 255

一般而言,我们可以tuple用来解压缩-

img[tuple(coords.T)] = 255

我们还可以计算线性指数,然后分配np.put-

np.put(img, np.ravel_multi_index(coords.T, img.shape), 255)

Python for循环中添加字典到列表,结果列表中全是循环中的最后一个值

Python for循环中添加字典到列表,结果列表中全是循环中的最后一个值

案例1

item1 = {}
gender_areas = []
for ge in gender:
# 男性
  man = ge.split(":")[0].strip() or ''
  # print("man",man)
  # 男性比例
  man_percent = ge.split(":")[1].strip() or ''
  # print("man_percent",man_percent)
  item1["man"] = man
  item1["man_percent"] = man_percent
  print(item1)
  gender_areas.append(item1)
 print("gender_areas", gender_areas)

运行结果:
全是女性,每次都是赋值最后一个字典
gender_areas [{'gender_area': '性别分布', 'man': '女性', 'man_percent': '13.46%'}, {'gender_area': '性别分布', 'man': '女性', 'man_percent': '13.46%'}]

解决方法1.

把item1 = {} 移到循环句里面,即可.

gender_areas = []
for ge in gender:
  item1 = {}
  # 男性
  man = ge.split(":")[0].strip() or ''
  # print("man",man)
  # 男性比例
  man_percent = ge.split(":")[1].strip() or ''
  # print("man_percent",man_percent)
  item1["man"] = man
  item1["man_percent"] = man_percent
  print(item1)
  gender_areas.append(item1)
  print("gender_areas", gender_areas)

运行结果正确:
gender_areas [{'gender_area': '性别分布', 'man': '男性', 'man_percent': '86.54%'}, {'gender_area': '性别分布', 'man': '女性', 'man_percent': '13.46%'}]

解决方法2.使用浅拷贝

def func():
  ...
  yield result


list = []
for dic in func():
  list.append(dic.copy())

Python While循环中的分配条件

Python While循环中的分配条件

在C语言中,

while( (i=a) != b ) { }

但是在Python中,似乎没有。

while (i = sys.stdin.read(1)) != "\n":

产生

    while (i = sys.stdin.read(1)) != "\n":
         ^
SyntaxError: invalid syntax

^应该在上=

有解决方法吗?

python – 列表中元素的顺序是否会导致for循环中的错误?

python – 列表中元素的顺序是否会导致for循环中的错误?

我正在使用一个简单的脚本来逃避某些HTML字符,并且遇到了一个错误,这个错误似乎是由我的列表escape_pairs中的元素顺序引起的.我在循环中不是modifying the lists,所以我想不出任何我在这里忽略的Python /编程原理.

escape_pairs = [(">","&gt;"),("<","&lt;"),('"',"&quot;"),("&","&amp;")]

def escape_html(s):
    for (i,o) in escape_pairs:
        s = s.replace(i,o)
    return s

print escape_html(">")
print escape_html("<")
print escape_html('"')
print escape_html("&")

回报

&amp;gt;
&amp;lt;
&amp;quot;
&amp;

但是当我在escape_pairs列表中切换元素的顺序时,bug就消失了

>>> escape_pairsMod = [("&","&amp;"),(">","&gt;")]

&gt;
&lt;
&quot;
&amp;
最佳答案
是的,在您的第一次实施中,它可以.

让我们看一下>和清单 –

escape_pairs = [(">","&amp;")]

在遍历escape_pairs时,首先得到>并用& gt;替换它.这导致字符串变为’& gt; .然后你继续迭代,最后你找到(“&”,“& amp;”),然后你替换&在带有& amp;的字符串中,使结果成为你现在得到的结果.

更改列表的顺序时,您将获得正确的结果.但这仍然只是因为你首先考虑到&只有在那之后你还考虑了其​​他.

根据字典,您可以使用str.translate来共同翻译字符串.示例 –

>>> escape_pairs = [(">","&amp;")]
>>> escape_dict = dict(escape_pairs)
>>> t = str.maketrans(escape_dict)
>>> ">".translate(t)
'&gt;'
>>> "> & <".translate(t)
'&gt; &amp; &lt;'

但是,如果您想要做的是HTML转义字符串,那么您应该使用标准库 – cgi

>>> import cgi
>>> cgi.escape("< > &")
'&lt; &gt; &amp;'

此外,如果您使用的是Python 3.2,则可以使用html.escape,例如 –

>>> import html
>>> html.escape("< > &")
'&lt; &gt; &amp;'

我们今天的关于python将值分配给循环中的列表元素python将循环得到的数据放入列表的分享已经告一段落,感谢您的关注,如果您想了解更多关于numpy:将值分配给带有索引列表的2d数组、Python for循环中添加字典到列表,结果列表中全是循环中的最后一个值、Python While循环中的分配条件、python – 列表中元素的顺序是否会导致for循环中的错误?的相关信息,请在本站查询。

本文标签: