Py学习  »  Python

用python将[a b c]转换为[a,b,c]

Soheil Rasouli • 4 年前 • 200 次点击  

我想把列表转换成 [a b c] [a,b,c] 在python 3中

我的列表:

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

我想把这个单子的整数加起来!我该怎么做?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52822
 
200 次点击  
文章 [ 2 ]  |  最新文章 4 年前
Gutemberg Schiessl
Reply   •   1 楼
Gutemberg Schiessl    4 年前

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

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)
Richard Keene
Reply   •   2 楼
Richard Keene    4 年前

首先,这不起作用。。。

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这样的任何部分,没有空格的部分变成12嗨

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

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