【问题标题】:How to convert string elements to integer in a nested list except the first element如何在嵌套列表中将字符串元素转换为整数,第一个元素除外
【发布时间】:2016-02-21 15:28:29
【问题描述】:

我有这个清单:

输入:Templist = [['Resource', '0', '3', ], ['read', '0', '0', '0']]

输出应该是这样的

输出:[['Resource', 0, 3, 7], ['read', 0, 0, 5]]

我想将所有字符串转换为整数,除了 Templist 中每个列表的第一个元素。

【问题讨论】:

  • 75 是从哪里来的?是错别字吗?
  • 答案给了你你所问的,但是只是一个小建议,如果 Templist 不是输入并且你创建的东西(附加或其他),你应该尝试将这些值添加为整数开始而不是稍后尝试转换它们。如果是外部数据,则无需遵循此建议。

标签: python list nested


【解决方案1】:
>>> [sublist[:1] + [int(x) for x in sublist[1:]] for sublist in Templist]
[['Resource', 0, 3], ['read', 0, 0, 0]]

或者,在 Python 2 中,我会使用 map

>>> [sublist[:1] + map(int, sublist[1:]) for sublist in Templist]
[['Resource', 0, 3], ['read', 0, 0, 0]]

我还假设神奇地出现的 7 和 5 是你的错别字。

【讨论】:

  • 可以使用sublist[:1],那么你就不需要在它周围加上[]了。
  • @StefanPochmann 谢谢,我用你的建议来改进我的答案。
  • @panchanan 好的,请考虑接受任何对您有帮助的答案。
【解决方案2】:
>>> [[head] + list(map(int, tail)) for head, *tail in Templist]
[['Resource', 0, 3], ['read', 0, 0, 0]]

或者:

>>> [item[:1] + list(map(int, item[1:])) for item in Templist]
[['Resource', 0, 3], ['read', 0, 0, 0]]

或者:

>>> [[item.pop(0)] + list(map(int, item)) for item in Templist]
[['Resource', 0, 3], ['read', 0, 0, 0]]

【讨论】:

  • 真的很喜欢通配符,真的不喜欢pop in a list comp
  • @timgeb 我曾经用过[max(a, b).pop(0) for _ in a+b],你觉得怎么样? :-D。但是,是的,我同意这里不太好。
【解决方案3】:
newlist = [[int(element) if element.isdigit() else element for element in sub] for sub in Templist]

是,我相信,你想要什么。这是假设您出现'7''5' 是因为您不小心将它们排除在Templist 之外。如果除第一个字符串之外的其他字符串之一不是整数,这也不会出错。

【讨论】:

  • 您是否希望有一个非常容易理解的程序,但它所做的只是打印“Hello World!”还是用机器代码编写的像 Gimp 这样的程序?我的方法可读性差一些,但它做得更多。
【解决方案4】:

这可能有效:

def processList (aList):
    finalList = []
    for aListEntry in aList:
        finalListEntry = []
        for aListEntry_entry in aListEntry:
            try:
                finalListEntry.append(int(aListEntry_entry)
            except:
                finalListEntry.append(aListEntry_entry)
        finalList.append(finalListEntry)
    return finalList

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多