【问题标题】:How to remove the negative sign in a list?如何删除列表中的负号?
【发布时间】:2021-04-13 07:25:35
【问题描述】:

我正在尝试删除premier_leagueindex[2] 之前的所有负号:

我的代码:

premier_league = [
             ['A1','Manchester City', '-1', 'Aguero'],
             ['A2','Manchester City', '-11,2', 'Mahrez'],
             ['A3','Manchester City', '-13,5', 'Sterling'],
             ['B1','Liverpool', '-,5', 'Mane'],
             ['B2','Liverpool', '-5,6', 'Salah'],
             ['B3','Liverpool', '-7,2', 'Jota']]

for l in premier_league:
    del l[-2][0]

当前输出:

TypeError: 'str' object doesn't support item deletion

期望的输出:

premier_league = [
             ['A1','Manchester City', '1', 'Aguero'],
             ['A2','Manchester City', '11,2', 'Mahrez'],
             ['A3','Manchester City', '13,5', 'Sterling'],
             ['B1','Liverpool', ',5', 'Mane'],
             ['B2','Liverpool', '5,6', 'Salah'],
             ['B3','Liverpool', '7,2', 'Jota']]

【问题讨论】:

  • 您是否尝试过使用子字符串?例如l[-2] = [-2][1:]
  • 字符串是不可变的——你不能改变它——你只能用不同的东西替换整个字符串。

标签: python list negative-number


【解决方案1】:

str.strip() 将从您调用它的字符串的任一侧删除空格。您可以选择给它一个字符串,它会从字符串的任一侧删除所有这些字符。

它的派生词str.lstrip()str.rstrip() 将执行相同的操作,但分别仅针对字符串的左端或右端。在这种情况下,由于您想从前面删除一个减号,str.lstrip() 是要走的路。

for l in premier_league:
    l[2] = l[2].lstrip('-')

【讨论】:

  • 谢谢兄弟。欣赏它。
【解决方案2】:

使用嵌套的list comprehensionsre.sub

import re
premier_league = [[re.sub(r'^-', '', item) for item in x] for x in premier_league]

【讨论】:

    【解决方案3】:

    你可以使用 str.strip() 或者你可以转换为列表和切片“-”

    for l in premier_league:
        if l[2].startswith('-'): #not sure if all start with - or not
           temp=list(l[2])[1:] #convert to list and slice
           l[2]=''.join(temp) #to return it to string again
    

    旁注:我认为利物浦应该永远排在你的首位;)

    【讨论】:

      【解决方案4】:

      尝试将值设置为其绝对值:

      for l in premier_league:
         i = str(l[2]).replace(',','.')
         i = abs(i)
         i = i.replace('.',',')
         l[2] = float(i)
      

      ...但我想一想,它看起来太大惊小怪了,所以我怀疑将 '-' 去掉可能更容易

      【讨论】:

      • 您必须先将它们转换为float,然后再转换回str,但为此您必须先将, 替换为.,然后再转换回@ 987654326@... 当然,如果这些是实际数字(并且可能应该是),这将是更好的方法。
      • @tobias_k 感谢您的澄清!会相应地修改我的答案
      猜你喜欢
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 2012-12-17
      • 2020-11-15
      相关资源
      最近更新 更多