Python:从字符串创建列表

11

我有一个字符串列表

a = ['word1, 23, 12','word2, 10, 19','word3, 11, 15']

我想创建一个列表

b = [['word1',23,12],['word2', 10, 19],['word3', 11, 15]]

这是一个简便的方法吗?

5个回答

28
input = ['word1, 23, 12','word2, 10, 19','word3, 11, 15']
output = []
for item in input:
    items = item.split(',')
    output.append([items[0], int(items[1]), int(items[2])])

3
@Oliver 我不确定你是认真的还是开玩笑!;-) 这似乎并不完全符合 Python 风格。列表推导式有其适用的场景,但在我看来可能会过度使用。或许这只是因为我不太熟悉它们。 - David Heffernan
绝对认真!它非常易读。我认为这是一个经典的例子,列表推导式可以使用,但最终并不是最好的选择。 - user
我想这只是风格问题,我更喜欢列表推导式! - wim

8

试试这个:

b = [ entry.split(',') for entry in a ]
b = [ b[i] if i % 3 == 0 else int(b[i]) for i in xrange(0, len(b)) ]

2
比其他人更简洁:
def parseString(string):
    try:
        return int(string)
    except ValueError:
        return string

b = [[parseString(s) for s in clause.split(', ')] for clause in a]

如果您的格式固定为<string>, <int>, <int>,您可以更加简洁:
def parseClause(a,b,c):
    return [a, int(b), int(c)]

b = [parseClause(*clause) for clause in a]

1
如果您需要将其中一些转换为数字,但事先不知道哪些,就需要编写一些额外的代码。尝试类似以下的代码:
b = []
for x in a:
    temp = []
    items = x.split(",")
    for item in items:
        try:
            n = int(item)
        except ValueError:
            temp.append(item)
        else:
            temp.append(n)
    b.append(temp)

这个答案比其他的长,但更加灵活多变。


1

我知道这已经旧了,但这里是一个只有一行的列表推导式:

data = ['word1, 23, 12','word2, 10, 19','word3, 11, 15']

[[int(item) if item.isdigit() else item for item in items.split(', ')] for items in data]

or

[int(item) if item.isdigit() else item for items in data for item in items.split(', ')]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接