【问题标题】:Convert [a b c] to [a,b,c] with python使用 python 将 [a b c] 转换为 [a,b,c]
【发布时间】:2019-09-10 14:28:53
【问题描述】:

我想在 python 3 中将[a b c] 之类的列表转换为[a,b,c]

我的清单:

[john jr 0, Akbar AK 1001, doctor rd 9999, Mohammedans med 1000, pat mat 200, cajole Jul 21]

我想总结这个列表的整数!我该怎么做?

【问题讨论】:

  • 你从哪里得到你的意见?它是像"[john jr 0, doctor rd 9999]" 这样的字符串还是像["john jr 0", "doctor rd 9999"] 这样的字符串列表,还是其他格式?
  • 您的输入在语法上无效,所以我们只能猜测您的意思
  • 首先,您的列表不正确,因为正如 Patrick Haugh 指出的那样,它似乎缺少字符串字符。其次,不清楚你的意思是“我想总结这个列表的整数!我该怎么做?”

标签: python python-3.x string list tuples


【解决方案1】:

首先,这不起作用...

a = [john jr 0, Akbar AK 1001, doctor rd 9999, Mohammedans med 1000, pat mat 200, cajole Jul 21]

因为它不是 python 有效的语法。 所以我假设你的意思是

a = "[john jr 0, Akbar AK 1001, doctor rd 9999, Mohammedans med 1000, pat mat 200, cajole Jul 21]"

我们可以用分隔符把它分成几部分... 默认分隔符是空格“” 现在我们的代码是

s = "[john jr 0, Akbar AK 1001, doctor rd 9999, Mohammedans med 1000, pat mat 200, cajole Jul 21]"
s = s.replace("[", "").replace("]", "")
s = s.replace(",", " ")
a = s.split()
print(s)
print(a)

我们被打印出来了

[john jr 0, Akbar AK 1001, doctor rd 9999, Mohammedans med 1000, pat mat 200, cajole Jul 21]
['[john', 'jr', '0,', 'Akbar', 'AK', '1001,', 'doctor', 'rd', '9999,', 'Mohammedans', 'med', '1000,', 'pat', 'mat', '200,', 'cajole', 'Jul', '21]']

有点难以阅读,您可能不想要前括号和尾括号,所以我们去掉它们。逗号会导致数字解析错误,所以我们用空格替换它们。由于空格是分隔符,我们希望像 12,hi 这样没有空格的部分变成 12 hi

接下来让我们找出所有的数字并将它们相加。我们必须简单地尝试将每个字符串解析为一个数字,看看它是否成功。

s = "[john jr 0, Akbar AK 1001, doctor rd 9999, Mohammedans med 1000, pat mat 200, cajole Jul 21]"
s = s.replace("[", "").replace("]", "")
s = s.replace(",", " ")
a = s.split()
print(s)
print(a)
mysum = 0.0
for w in a:
    print("Word is %s" % (w,))
    try:
        n = float(w)
        print("Found number %f" % (n,))
        mysum += n
    except:
        # Ignore any exceptions
        pass
print("Sum is %f" %(mysum,))
pass

我们得到

john jr 0  Akbar AK 1001  doctor rd 9999  Mohammedans med 1000  pat mat 200  cajole Jul 21
['john', 'jr', '0', 'Akbar', 'AK', '1001', 'doctor', 'rd', '9999', 'Mohammedans', 'med', '1000', 'pat', 'mat', '200', 'cajole', 'Jul', '21']
Word is john
Word is jr
Word is 0
Found number 0.000000
Word is Akbar
Word is AK
Word is 1001
Found number 1001.000000
Word is doctor
Word is rd
Word is 9999
Found number 9999.000000
Word is Mohammedans
Word is med
Word is 1000
Found number 1000.000000
Word is pat
Word is mat
Word is 200
Found number 200.000000
Word is cajole
Word is Jul
Word is 21
Found number 21.000000
Sum is 12221.000000

所以现在我们有了符合您所说的工作代码,它会找到数字并将它们相加。 但是这是可维护的、高效的和功能性的吗? 当我遇到上述问题时,我会使用一些我制作的方法来简化它。 他们来了。

def tryParseInt(value=None, default_value=0):
    """
    Try to parse a string value to an int.  Returns the value and True
    e.g.  tryParseInt("42", 7) returns (42, True)
    tryParseInt("abcdef", 7) returns (7, False)
    See twit_test.py
    """
    try:
        return int(value), True
    except (ValueError, TypeError):
        return default_value, False


def tryParseFloat(value=None, default_value=0.0):
    """
    Try to parse a string value to an float.  Returns the value and True
    e.g.  tryParseInt("42.42", 7.3) returns (42.42, True)
    tryParseInt("abcdef", 7.3) returns (7.3, False)
    See twit_test.py
    """
    try:
        return float(value), True
    except (ValueError, TypeError):
        return default_value, False


def split_strip(s: str, sep=' '):
    """ 
    Split s into parts on delimiter, then strip the sub strings and remove any blanks.
    Never returns None.
    Returns an array of the sub strings.  The returned array my be empty.
    See twit_test.py for examples.
    """
    if s is None:
        return []
    parts = s.split(sep=sep)
    ret = []
    if parts is not None:
        for ss in parts:
            sss = ss.strip()
            if len(sss) > 0:
                ret.append(sss)
    return ret

GitHib 项目https://github.com/RMKeene/twit 上提供了上述帮助程序

【讨论】:

    【解决方案2】:

    我不太懂英语,但我认为这是你所期望的

    L = 'john jr 0, Akbar AK 1001, doctor rd 9999, Mohammedans med 1000, pat mat 200, 
    
    cajole Jul 21'
    L = L.split(',')
    Sum_L = 0
    for i in range(0,len(L)):
      L[i] = (L[i].strip()).split(' ')
      Sum_L = Sum_L + int(L[i][2])
    print(Sum_L)
    

    【讨论】:

      猜你喜欢
      • 2011-05-30
      • 2020-07-15
      • 2018-09-14
      • 1970-01-01
      • 2014-03-23
      • 2021-12-27
      • 2020-07-08
      • 2017-01-05
      • 2012-09-03
      相关资源
      最近更新 更多