【问题标题】:remove commas from tuples in list从列表中的元组中删除逗号
【发布时间】:2016-12-03 00:15:48
【问题描述】:

我有元组列表

items = [('Abkhazian',), ('Afar',), ('Afrikaans',), ('Albanian',), ('Amharic',), ('Arabic',), ('Armenian',), ...]

想要成功

['Abkhazian', 'Afar', 'Afrikaans', 'Albanian', 'Amharic', 'Arabic', 'Armenian', ... ]

目前我找到的唯一解决方案如下

items = [str[i] for item in items]
for i in range(len(items)):
    items[i] = items[i].replace("[","")
    items[i] = items[i].replace("(","")
    items[i] = items[i].replace("'","")
    items[i] = items[i].replace(",","")
    items[i] = items[i].replace(")","")
    items[i] = items[i].replace("]","")

我觉得应该有更好的方法

【问题讨论】:

    标签: python list python-3.x tuples


    【解决方案1】:

    嗯,项目中没有逗号,它只是你得到的单元素元组。

    如果您不需要在列表中包含单个元素元组,而是将它们作为字符串条目,只需使用列表推导:

    res = [item[0] for item in items] 
    

    从原始列表的每个元组中选择第一项。

    print(res)
    ['Abkhazian', 'Afar', 'Afrikaans', 'Albanian', 'Amharic', 'Arabic', 'Armenian']
    

    您确实可以通过@ShadowRanger 的光滑解包替代方案获得不错的加速:

    res = [item for item, in items]
    

    可能看起来像一个错字,但它可以完成工作。

    【讨论】:

    • 微不足道的变化(通过将更多工作推到 C 层,对于大型输入可能会更快,尚未测试):from operator import itemgetter 在文件顶部,do list(map(itemgetter(0), items))(可以省略 list包装在 Py2 上)。或者使用序列解包[item for item, in items] 确保您在每个tuple 中确实只有一个项目的变体列表理解;在 Python 3.5 上测试了它的运行时间降低了大约 20%(Python 中的索引速度非常慢),无论items 有多大或多小,它都应该更快。
    【解决方案2】:

    在更 Pythonic 方面,您可以解压缩列表:

    items = list(list(zip(*items))[0])
    

    【讨论】:

    • 使用 zip 撤消单个元素 tuples 不是“Pythonic”。它有效,但称它为 Pythonic 有点牵强。
    【解决方案3】:
    result = [i[0] for i in items]
    print (result)
    

    没有什么花哨的东西,也没有看起来像拼写错误的逗号

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多