Python 2.7:使用for循环格式化列表中的列表

3

输入:

data = [['A', 'B', 'C'], ['001', 'ddd', 'eee', '10'], ['002', 'fff', 'ggg', '20']]

预期输出:
data = ['A', 'B', 'C'], [1, 'ddd', 'eee', 10], [2, 'fff', 'ggg', 20]]
  • 将具有数字值的列从字符串转换为整数(删除数字周围的引号)

我尝试使用以下代码,但出现了以下错误:

ValueError: could not convert string to float: A

有人能指出我的错误吗?

formatted = []
for row in data:
    new_row = []
    for i, col in enumerate(row):
        if i != [1,2]:
            new_row.append(col)
            new_row.append(float(col))
    formatted.append(new_row)

print formatted

有没有可能在列表中放置多个元素而不使用逗号? - Prasad
2
“在每个列表后面删除逗号”?对于您所要求的内容,没有这样的数据类型。 - goodvibration
1
有人能指出我的错误吗?- 我们可能指出什么,而“无法将字符串转换为浮点数”没有指出的吗? - goodvibration
@好的振动 好的,那我猜我会编辑帖子以删除第一个标准。 - doyz
5个回答

3

在处理这个问题时,一种“Pythonic”的方法是尝试将每个元素转换为整数,并在失败的情况下保留字符串。

formatted = []
for row in data:
    new_row = []
    for elem in row:
        try:
            new_row.append(int(elem))
        except ValueError:
            new_row.append(elem)
    formatted.append(new_row)

print formatted

1
这个怎么样:
def to_float(s):
    try:
        return float(s)
    except:
        return s

[[to_float(s) for s in row] for row in data]

1
您可以使用map应用带有条件的lambda函数:
for i,d in enumerate(data):
    data[i] = map(lambda x: float(x) if x.isdigit() else x, d)

map 函数将 lambda 函数应用于 d 的每个子元素。如果元素是表示数字的字符串,则使用 float 进行转换,否则保留整个字符串。它直接替换 data 中的子列表。

在 Python 3.X 中,map 函数的结果需要显式转换为列表,即 data[i] = list(map())


1
你的变量i是一个整数,永远不会等于列表[1,2]。你想要表达/写的是:if i not in [1,2]: 编辑: 我忘记了第一行。 由于你的第一行与其他行不同,要么处理方式不同(不建议),要么使用其他答案(建议)。

1
他可能是这个意思,但我认为这并不能修复他的代码! - Imran

0
您可以尝试使用以下的json和正则表达式:
import json, re

data = [['A', 'B', 'C'], ['001', 'ddd', 'eee', '10'], ['002', 'fff', 'ggg', '20']]
data = json.dumps(data)
data = json.loads(re.sub(r'"0*(\d+)"', r'\1', data)

print (data)

输出:

[['A', 'B', 'C'], [1, 'ddd', 'eee', 10], [2, 'fff', 'ggg', 20]]

你还提到想要在每个列表后面删除逗号,这里有一种方法:

data = reduce(lambda oldList, newList: oldList + newList, data, [])

输出:

['A', 'B', 'C', 1, 'ddd', 'eee', 10, 2, 'fff', 'ggg', 20]

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