【问题标题】:Iteration over sliced list to remove digits in Python迭代切片列表以删除 Python 中的数字
【发布时间】:2021-10-26 16:58:42
【问题描述】:

我有这个列表,这是从一个网站上抓取的梦幻足球联赛的排名:

rank = ['1', 'Kaufman Foundation0', '0', '2', 'sasicc e friarielli0', '0', '3', 'Mordi1992 Team0', '0', '4', 'Japanese Cry Team0', '0', '5', 'Le Rondini FC0', '0', '6', 'Team Mclaury0', '0', '7', 'Team Discio0', '0', '8', 'Papa Sarto Calcio0', '0']

我想删除每个包含团队名称的字符串末尾令人讨厌的 0。

我试过了

for i in range(len(rank[1::3])):
    rank[i] = ''.join([x for x in rank[1::3] if not x.isdigit()])

没有成功。 我希望正确修改列表“排名”,以便我可以打印它。 我从另一篇文章中复制了列表理解行,因为如果我在列表的单个元素上使用它,但它当然不能在 for 循环内工作。

输出应该是:

1 - Kaufman Foundation 0 
2 - sasicc e friarielli 0
...

最好的方法是什么?

【问题讨论】:

  • 请用您需要的输出更新您的问题。你想让rank 几乎保持现在的样子吗?
  • 已更新。我想改变“排名”。

标签: python list for-loop list-comprehension


【解决方案1】:
rank = ['1', 'Kaufman Foundation0', '0', '2', 'sasicc e friarielli0', '0', '3', 'Mordi1992 Team0', '0', '4', 'Japanese Cry Team0', '0', '5', 'Le Rondini FC0', '0', '6', 'Team Mclaury0', '0', '7', 'Team Discio0', '0', '8', 'Papa Sarto Calcio0', '0']
rank_=[l.rstrip('0') for l in rank[1::3]]

试试这个

rank_=[rank[0]]+[n.rstrip('0') if m%3==0 else n for m, n in enumerate(rank[1::])]
print(rank_)

【讨论】:

  • 但这并不会改变rank 列表,它只是创建另一个带有名称的列表。所有其他元素,如数字 - 1,0 不在新列表中。
  • PCM 是对的。这可行,但我需要将其与原始列表合并,将每个团队的名称保持在原始位置。
  • 您只需添加rank[1::3] = rank_
【解决方案2】:

您可以遍历rank 中每 3 个项目的中间并更新它:

rank = ['1', 'Kaufman Foundation0', '0', '2', 'sasicc e friarielli0', '0', '3', 'Mordi1992 Team0', '0', '4', 'Japanese Cry Team0', '0', '5', 'Le Rondini FC0', '0', '6', 'Team Mclaury0', '0', '7', 'Team Discio0', '0', '8', 'Papa Sarto Calcio0', '0']

for i in range(1, len(rank), 3):
    rank[i] = rank[i][:-1]

print(rank)

输出:

['1', 'Kaufman Foundation', '0', '2', 'sasicc e friarielli', '0', '3', 'Mordi1992 Team', '0', '4', 'Japanese Cry Team', '0', '5', 'Le Rondini FC', '0', '6', 'Team Mclaury', '0', '7', 'Team Discio', '0', '8', 'Papa Sarto Calcio', '0']

【讨论】:

  • rstrip('0')怎么样
  • 好的,rank[i] = rank[i].rstrip('0') 也可以。
【解决方案3】:
  • 如果列表项是数字,请保留它。
  • 否则,请从中删除尾随的“0”。
rank = [x[:-1] if not x.isnumeric() else x for x in rank]
>>> rank
['1', 'Kaufman Foundation', '0', 
 '2', 'sasicc e friarielli', '0', 
 '3', 'Mordi1992 Team', '0', 
 '4', 'Japanese Cry Team', '0', 
 '5', 'Le Rondini FC', '0', 
 '6', 'Team Mclaury', '0', 
 '7', 'Team Discio', '0', 
 '8', 'Papa Sarto Calcio', '0']

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 2012-11-11
    • 2015-02-04
    • 2015-01-24
    • 2021-03-04
    • 1970-01-01
    • 2020-05-08
    • 2013-08-05
    相关资源
    最近更新 更多