簡體   English   中英

如何在 Python 中將列表的一部分轉換為整數?

[英]How to convert part of a list into integers in Python?

我有包含名稱和分數的列表,例如:

[['AMY', '2', '9', '10'], ['ANNA', '10', '4', '7'], ['BOB', '6', '7', '10']]

我希望它以這樣的方式結束:

[['AMY', 2, 9, 10], ['ANNA', 10, 4, 7], ['BOB', 6, 7, 10]]

我需要將數字轉換為整數,因為它們在嘗試使用 max() 函數時給我帶來了問題,因為它無法將 10 識別為最大的項目。 我已經嘗試了很長時間,但我不斷收到不同類型的錯誤。 我四處搜索,似乎每個人都在告訴我使用地圖或列表理解,但這些似乎都不起作用。

data = [['AMY', '2', '9', '10'], ['ANNA', '10', '4', '7'], ['BOB', '6', '7', '10']]
dict_data = {sublist[0]: list(map(int, sublist[1:])) for sublist in data}

現在您可以使用每個人的姓名訪問他們的號碼,例如:

>>> print(dict_data['AMY'])
[2, 9, 10]
>>> print(max(dict_data['AMY']))
10

對於字典創建,您使用子列表中的第一個元素作為鍵,然后使用map()將其余元素轉換為整數。 正如您可能在其他問題list(map(int, sublist[1:]))讀到的那樣list(map(int, sublist[1:]))[int(i) for i in sublist[1:]]

解決辦法是:

data = [['AMY', '2', '9', '10'], ['ANNA', '10', '4', '7'], ['BOB', '6', '7', '10']]
print [[a if not a.isdigit() else int(a) for a in element] for element in data]

由於看起來每個list的第一個元素是姓名,而其他元素可能是考試成績,因此您應該使用帶有人名鍵和分數list值的字典:

l = [['AMY', '2', '9', '10'], ['ANNA', '10', '4', '7'], ['BOB', '6', '7', '10']]
dct = {x[0]:[int(el) for el in x[1:]] for x in l}

然后,您可以更輕松地處理數據:

>>> for name in dct:
...     print(name, max(dct[name]))
...
('AMY', 10)
('BOB', 10)
('ANNA', 10)

您擁有的是一組記錄。 那是你的data

data = [
  ['AMY', '2', '9', '10'],
  ['ANNA', '10', '4', '7'],
  ['BOB', '6', '7', '10']
  ]

您的第一個問題是如何轉換每條記錄。 正確的方法是定義一個轉換並將其映射到您的記錄列表中。 例如,您可以像這樣執行您要求的第一件事:

def transform_record(lst):
  name = lst[0]
  grades = list(map(int, lst[1:]))
  grades.insert(0, name)
  return grades

print(list(map(transform_record, data)))

但也許這是一個不必要的額外步驟。 您提到的第二件事是希望將最高分數與每個名稱相關聯。 因此,您可以只提取您想要的信息,而不是對每條記錄進行完整的轉換。

def name_best(lst):
  name = lst[0]
  grades = map(int, lst[1:])
  best = max(grades)
  return (name, best)

print(list(map(name_best, data)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM