0

我尝试了多种方法来转换它,但都没有成功。例如,我的清单是。

testscores= [['John', '99', '87'], ['Tyler', '43', '64'], ['Billy', '74', '64']]

我只想将数字转换为整数,因为稍后我最终会平均实际分数并将名称留在字符串中。

我希望我的结果看起来像

testscores = [['John', 99, 87], ['Tyler', 43, 64], ['Billy', 74, 64]]

我已经尝试了许多 for 循环来尝试,并且只尝试 int 这些列表中的数字,但根本没有任何工作。如果你们中的任何人需要我的一些测试代码,我可以添加。谢谢。

4

3 回答 3

2

如果所有嵌套列表的长度为 3(即每个学生 2 个分数),那么简单如下:

result = [[name, int(s1), int(s2)] for name, s1, s2 in testscores]
于 2013-04-20T19:24:37.847 回答
2

在 Python 2 中,对于任意长度的子列表:

In [1]: testscores = [['John', '99', '87'], ['Tyler', '43', '64'],
   ...: ['Billy', '74', '64']]

In [2]: [[l[0]] + map(int, l[1:]) for l in testscores]
Out[2]: [['John', 99, 87], ['Tyler', 43, 64], ['Billy', 74, 64]]

在 Python 3(或 2)中:

In [2]: [[l[0]] + [int(x) for x in l[1:]] for l in testscores]
Out[2]: [['John', 99, 87], ['Tyler', 43, 64], ['Billy', 74, 64]]
于 2013-04-20T19:25:04.323 回答
0

已经发布了一些解决方案,但这是我的尝试,不依赖tryand except

newScores = []
for personData in testScores:
    newScores.append([])
    for score in personData:
        if score.isdigit(): # assuming all of the scores are ints, and non-negative
            score = int(score)
        elif score[:1] == '-' and score[1:].isdigit(): # using colons to prevent index errors, this checks for negative ints for good measure
            score = int(score)
    newScores[-1].append(score)
testscores = newScores

附带说明一下,我建议您考虑使用 Pythondict结构,它允许您执行以下操作:

testScores = {} # or = dict()
testScores["John"] = [99,87]
于 2013-04-20T19:52:30.747 回答