蟒蛇:从字符串
问题描述:
创建名单上有串蟒蛇:从字符串
a = ['word1, 23, 12','word2, 10, 19','word3, 11, 15']
的名单,我想创建一个列表
b = [['word1',23,12],['word2', 10, 19],['word3', 11, 15]]
这是一个简单的方法来做到这一点?如果你需要他们中的一些转换为数字并提前哪些,一些额外的代码将需要不知道
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)) ]
答
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])])
答
试试这个。尝试这样的:
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)
这比其他答案更长,但它更通用。
答
:
答
比别人
更简洁:
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]
答
我知道这是旧的,但这里有一个一个班轮列表理解:
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]
或
[int(item) if item.isdigit() else item for items in data for item in items.split(', ')]
@Oliver我不知道,如果你正在严重或不! ;-)似乎并不是Pythonic。列表理解有它们的位置,但我认为它们可能过分。或者这也许就是我对他们不熟悉。 –
绝对严重!它非常可读。我认为这是一个可以使用列表理解*的经典例子,但最终并不是最好的选择。 – user
这是一个风格问题,我猜想,我更喜欢列表理解! – wim