以上就是给各位分享python将值分配给循环中的列表元素,其中也会对python将循环得到的数据放入列表进行解释,同时本文还将给你拓展numpy:将值分配给带有索引列表的2d数组、Pythonfor循
以上就是给各位分享python将值分配给循环中的列表元素,其中也会对python将循环得到的数据放入列表进行解释,同时本文还将给你拓展numpy:将值分配给带有索引列表的2d数组、Python for循环中添加字典到列表,结果列表中全是循环中的最后一个值、Python While循环中的分配条件、python – 列表中元素的顺序是否会导致for循环中的错误?等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- python将值分配给循环中的列表元素(python将循环得到的数据放入列表)
- numpy:将值分配给带有索引列表的2d数组
- Python for循环中添加字典到列表,结果列表中全是循环中的最后一个值
- Python While循环中的分配条件
- python – 列表中元素的顺序是否会导致for循环中的错误?
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数组
我有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
小编典典我们可以将coords
as的每一行拆开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循环中添加字典到列表,结果列表中全是循环中的最后一个值
案例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循环中的分配条件
在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循环中的错误?
我正在使用一个简单的脚本来逃避某些HTML字符,并且遇到了一个错误,这个错误似乎是由我的列表escape_pairs中的元素顺序引起的.我在循环中不是modifying the lists,所以我想不出任何我在这里忽略的Python /编程原理.
escape_pairs = [(">",">"),("<","<"),('"',"""),("&","&")]
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("&")
回报
&gt;
&lt;
&quot;
&
但是当我在escape_pairs列表中切换元素的顺序时,bug就消失了
>>> escape_pairsMod = [("&","&"),(">",">")]
>
<
"
&
让我们看一下>和清单 –
escape_pairs = [(">","&")]
在遍历escape_pairs时,首先得到>并用& gt;替换它.这导致字符串变为’& gt; .然后你继续迭代,最后你找到(“&”,“& amp;”),然后你替换&在带有& amp;的字符串中,使结果成为你现在得到的结果.
更改列表的顺序时,您将获得正确的结果.但这仍然只是因为你首先考虑到&只有在那之后你还考虑了其他.
根据字典,您可以使用str.translate来共同翻译字符串.示例 –
>>> escape_pairs = [(">","&")]
>>> escape_dict = dict(escape_pairs)
>>> t = str.maketrans(escape_dict)
>>> ">".translate(t)
'>'
>>> "> & <".translate(t)
'> & <'
但是,如果您想要做的是HTML转义字符串,那么您应该使用标准库 – cgi
–
>>> import cgi
>>> cgi.escape("< > &")
'< > &'
此外,如果您使用的是Python 3.2,则可以使用html.escape
,例如 –
>>> import html
>>> html.escape("< > &")
'< > &'
我们今天的关于python将值分配给循环中的列表元素和python将循环得到的数据放入列表的分享已经告一段落,感谢您的关注,如果您想了解更多关于numpy:将值分配给带有索引列表的2d数组、Python for循环中添加字典到列表,结果列表中全是循环中的最后一个值、Python While循环中的分配条件、python – 列表中元素的顺序是否会导致for循环中的错误?的相关信息,请在本站查询。
本文标签: