【问题标题】:String of ints to list python列出python的整数字符串
【发布时间】:2017-11-03 19:42:57
【问题描述】:

我有以下字符串:

  string =  '['1', '2', '3']'

我想把它变成一个整数列表,这样我就可以将列表中的每个整数加在一起得到 6 的输出

我目前有这个代码:

stripQuotes = ", ".join(string)
intList =[stripQuotes]
map(int, intList)
print(intList)

但我得到以下输出:

['1, 2, 3']

代替:

[1, 2, 3]

【问题讨论】:

  • 这个string = '['1', '2', '3']' 会抛出SyntaxError: invalid syntax
  • ... 如果您通过将第一个和最后一个撇号更改为引号来修复该 SyntaxError,那么您的代码仍然会因ValueError: invalid literal for int() with base 10: "[, ', 1, ', ,, , ', 2, ', ,, , ', 3, ', ]" 而崩溃。我不认为这是产生该输出的代码。

标签: python string list int


【解决方案1】:

你可以简单地使用正则表达式:

短:

import re
string =  """'['1' ,'2', '3']'"""
pattern=r'(\d.*?)'


match=re.finditer(pattern,string)
print([int(integer.group()) for integer in match])

详细说明:

import re
string =  """'['1' ,'2', '3']'"""

pattern=r'(\d.*?)'


int_list=[]
match=re.finditer(pattern,string)
for integer in match:
    int_list.append(int(integer.group()))

print(int_list)

输出:

[1, 2, 3]

正如你所说:

所以我可以将列表中的每个 int 加在一起以获得 6 的输出

然后:

print(sum([int(integer.group()) for integer in match]))

输出:

6

【讨论】:

    【解决方案2】:

    您没有转义内部字符串,这将导致错误。您可以用双引号替换外部引号:"['1', '2', '3']",或者您可以像这样转义内部引号:'[\'1\', \'2\', \'3\']'(我个人更喜欢第一个)

    from ast import literal_eval
    
    string = "['1', '2', '3']"
    int_list = [int(i) for i in literal_eval(string)]
    print(int_list)
    

    那么您只需使用sum() 来汇总列表中的元素:

    sum(int_list)
    

    查看literal_eval上的文档

    【讨论】:

      【解决方案3】:

      你可以评估:

      listofstrings=eval(strings)
      ints= [int(k) for k in listofstrings]
      

      如果您想要输入安全性,这是一种更安全的方法(如果我运行 eval,我晚上从不睡觉):

      elems= strings.split("'")
      ints=[]
      for k in elems:
          try:
              ints+=int(k)
      

      【讨论】:

      【解决方案4】:

      这会将字符串列表转换为整数列表

      strList =  ['1', '2', '3']
      intList = [int(i) for i in strList]
      

      【讨论】:

        【解决方案5】:

        您也可以使用地图功能来解决这个问题。例如:

        Python 2.x:

        string = "['1', '2', '3']"
        map(int, eval(string))
        [1,2,3]
        

        Python 3.x:

        string = "['1', '2', '3']"
        list(map(int, eval(string)))
        [1,2,3]
        

        【讨论】:

        • 这仍然会引发错误。你没有逃避内部引号。改用"['1', '2', '3']"
        • 是的,我已经对此进行了测试,但是我从原始问题中复制了字符串对象!下次会教我的。现在它应该可以工作了,至少在 python 2.x
        【解决方案6】:

        您可以使用此代码

        s1 = "['1', '2', '3']"    
        print(sum([int(x) for x in list(s1) if x.isnumeric()]))
        

        这将输出 6

        【讨论】:

        • str 对象没有 isnumeric 方法。 isnumeric 仅适用于 unicode 对象
        • 我想你在 python2 中。这适用于python3。所以“这行不通”具有误导性。
        猜你喜欢
        • 2019-09-19
        • 2010-10-19
        • 1970-01-01
        • 2021-06-17
        • 1970-01-01
        • 2017-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多