【发布时间】:2021-02-26 23:10:43
【问题描述】:
我正在尝试编辑列表中的特定元素。但是,在正确修改列表元素后,例如将\n<td>6.5%\n 转换为6.5%,我无法用新元素替换旧元素。因此,\n<td>6.5%\n 和所有其他元素在我的脚本结束时保持不变。
下面是一个可复制的例子。
#Define List example
example_list = ['<tr>\n<th><a href="/7.62x25mm_TT_AKBS" title="7.62x25mm TT AKBS"><img alt="TTAKBS.png" decoding="async" height="64" src="https://static.wikia.nocookie.net/escapefromtarkov_gamepedia/images/6/61/TTAKBS.png/revision/latest/scale-to-width-down/64?cb=20190519001904" width="64"/></a>\n</th>\n<th><a href="/7.62x25mm_TT_AKBS" title="7.62x25mm TT AKBS">7.62x25mm TT AKBS</a>\n</th>\n<td>58\n',
'h>\n<td>58\n',
'\n<td>12\n',
'\n<td>32\n',
'\n<td><font color="green">+15</font>\n',
'\n<td><font color="green">-15</font>\n',
'\n<td>25%\n',
'\n<td>6.5%\n',
'\n<td>425\n',
'\n<td>\n',
'\n<td data-sort-value="1"><a href="/Prapor" title="Prapor">Prapor</a> LL1\n',
'</tr>']
#`for loop` that only looks as the elements I want to clean
for cluttered_digits in example_list[1:9]:
#`for loop` and `if statment` that only retains a character if it is a digit,
#or relevant mathematical symbol (`.`, `+`, `-`, `%`)
cleaned_digits = ''
for character in cluttered_digits:
if (character.isnumeric()) or (character in ['+','','.','%']):
print('cleaned digits: ' + cleaned_digits) # reveals partial success
# (i)
#Here I attempt to replace the old list element with the new, cleaned one.
cluttered_digits = cleaned_digits
# (ii)
#The above failed so I also tried this to see what would happen.
for field in example_list:
if field == cluttered_digits:
field = str(cleaned_digits)
print(example_list) # reveals failure
尝试的解决方案:
python modify item in list, save back in list
#这种方法去掉了第一个列表元素,还复制了另一个?
对于索引,枚举中的cluttered_digits(example_list[1:9]):
cleaned_digits = ''
for character in cluttered_digits:
if (character.isnumeric()) or (character in ['+','','.','%']):
cleaned_digits += character
print('cleaned digits: ' + cleaned_digits)
example_list[index] = cleaned_digits
print(example_list)
这似乎处理的不是一个简单的列表?老实说,我无法真正理解开头的问题或目标是什么。
不再相关,但在 Wasif Hasan 的替代答案中解决。
您还会注意到我使用...
if (character.isnumeric()) or (character == '+') or (character == '-') or (character == '%') or (character == '.'):
我敢肯定,这让你们中的一些人畏缩不前。我确实尝试了一些东西...
if (character.isnumeric()) or (character == ['+','-','.','%']):
但这不起作用。如果有一种明显而简单的方式来写这篇文章,我将不胜感激指出正确的方向。
【问题讨论】:
-
您的问题是什么?每题一题。有没有机会将您的代码减少到最少 minimal reproducible example?
-
如果您正在使用 IDE现在是学习其调试功能的好时机 - 例如逐步执行、设置断点和检查值。或者你可以花点时间熟悉一下内置的Python debugger。此外,在程序的关键点打印 stuff 可以帮助您跟踪正在发生或未发生的事情。
-
您是在问如何在 for 循环中修改列表项吗?如果是这样,就有很多可能的重复项。
-
(i) 是的,我熟悉 MRE,但我会因为我糟糕的 if 语句而受到抨击。我本可以缩减我承认的 10 项清单,但老实说,我认为它的长度并不过分(ii)我已经包含了品脱声明,因此我知道我正在正确编辑,这是我无法做到的“覆盖”去做。我可以简单地选择一个变量并检查其中的内容。但我无法确定为什么列表元素没有改变 (iii) 具体项目,是的。我在类似 C 的 lang 和 java 中发现了一些重复项,但在 Python 中没有。