我的代码:
for x in remove_zeros:
if x == remove_zeros[-1]:
x = '0' + x
else:
x = '1' + x
由于某种原因,这对变量没有任何作用。我已经找到了解决方法,但没有任何效果。基本上,我要检测列表中的元素是否为最后一个元素,如果是,则在其前面添加0或1。我不知道该怎么做。
答案 0 :(得分:3)
编写x = '0' + x
时,只需覆盖名称x
指向的值。您不会在x
循环的每次新执行中直接修改for x in remove_zeros:
最初指向的列表内的值。
您可以通过直接使用其索引访问索引并为其分配新值来修改列表中的值。一种简单的方法是使用enumerate
,它可以同时遍历列表索引和值:
for index, x in enumerate(remove_zeros):
if x == remove_zeros[-1]:
remove_zeros[index] = '0' + x
else:
remove_zeros[index] = '1' + x
答案 1 :(得分:1)
在for循环中,控制变量(x)是一个临时变量,每次迭代时都会重新分配。对于字符串,它不是对列表元素的引用,而是一个单独的副本。这意味着在循环内更改x不会对列表产生影响。
鉴于您正在修改列表中的每个元素,因此无需借助索引即可完成此操作(这不是Python风格)。尝试使用列表理解来生成新列表:
XmlTextReader reader = new XmlTextReader("C:\\Users\\Vera\\Desktop\\ВИКУСИК\\ПРОЕКТ\\извлечение имен\\извлечение имен\\bin\\Debug\\MiYA_196X_ILivedInMineevka_nar.exb");
XElement root = XElement.Load(reader);
XmlNameTable nameTable = reader.NameTable;
XmlNamespaceManager nsmanager = new XmlNamespaceManager(nameTable);
nsmanager.AddNamespace("ps", "nprop");
IEnumerable<XElement> elements = root.XPathSelectElements("./tier", nsmanager);
Console.WriteLine( elements);
答案 2 :(得分:0)
使用索引号代替临时变量x
来修改列表的值:
for i in range(len(remove_zeros)):
remove_zeros[i] = ('0' if remove_zeros[i] == remove_zeros[-1] else '1') + remove_zeros[i]
答案 3 :(得分:0)
您在循环的每次迭代中都临时更改x
,但是这些更改不会保存在任何地方。每次循环重复x
时,都会重新定义为列表中的下一个元素,并且所做的修改会丢失。
相反,使用所需的值覆盖现有列表元素。一种方法是使用enumerate
:
for n,x in enumerate(remove_zeros):
if x == remove_zeros[-1]:
remove_zeros[n] = '0'+x
else:
remove_zeros[n] = '1'+x
答案 4 :(得分:0)
for
循环控制变量不是对列表元素的引用,它是元素的副本。更改它不会更改列表的元素。您可以将结果存储在另一个列表中:
result = []
for x in remove_zeros:
if x == remove_zeros[-1]:
result.append('0' + x)
else:
result.append('1' + x)
或执行@jfaccioni建议的操作。
顺便说一句,您不检查x是否是列表的最后一个元素,而是x 是否等于。考虑一个列表:
['3','0','1','2','3']
…您将0
放在列表中的两个3
之前。
答案 5 :(得分:0)
这是因为您正在使用循环变量x而不是要更改的实际元素。 remove_zeros中的元素保持不变。 将您的代码更改为:
for i in range(len(remove_zeros)):
remove_zeros[i] = '0' + remove_zeros[i] if remove_zeros[i] == remove_zeros[-1] else '1' + remove_zeros[i]