【问题标题】:Editing specific list elements [duplicate]编辑特定列表元素[重复]
【发布时间】: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)

Modify a list while iterating

这似乎处理的不是一个简单的列表?老实说,我无法真正理解开头的问题或目标是什么。


不再相关,但在 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 中没有。

标签: python list


【解决方案1】:

尝试使用in 运算符:

if (character.isnumeric()) or (character in ['+','-','.','%']):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2020-04-12
    • 2015-12-25
    • 2020-03-13
    相关资源
    最近更新 更多