我尝试了多种方法来转换它,但都没有成功。 例如,我的列表是。
testscores= [['John', '99', '87'], ['Tyler', '43', '64'], ['Billy', '74', '64']]
我想只将数字转换为整数,因为我最终会将实际分数平均化,并将名字保留在字符串中。
我希望我的结果看起来像
testscores = [['John', 99, 87], ['Tyler', 43, 64], ['Billy', 74, 64]]
我已经尝试了很多for循环来尝试并且只对这些列表中的数字进行int,但是根本没有。如果您需要我的一些测试代码,我可以添加。 感谢。
答案 0 :(得分:2)
如果所有嵌套列表的长度都为3(即每位学生2分),那就简单如下:
result = [[name, int(s1), int(s2)] for name, s1, s2 in testscores]
答案 1 :(得分: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]]
答案 2 :(得分:0)
已经发布了一些解决方案,但这是我的尝试,而不依赖于try
和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
另外,我建议您考虑使用Python dict
结构,它允许您执行以下操作:
testScores = {} # or = dict()
testScores["John"] = [99,87]