删除python中元组中的项目

时间:2015-10-07 23:11:41

标签: python list python-3.x tuples

我有一个这种格式的文件

[('misure', 'di', 'protezione'), ('libertà', 'di', 'espressione', 'di', 'popolo')]

我想要的是从元组中消除介词(di),并以相同的格式返回结果。所以我创建了这个函数来做到这一点

lista = myfilelist
prep = prepositionfile
li = ast.literal_eval(lista)

 for i in li:
    word = str(i)
    ll = word.split("', '")
    for w in ll:
        lll= w.strip("('')")
        if lll in prep:
            i = word.replace(lll, "")
            i.strip('')

     print (nonlem(li))

但它以这种格式返回元组

[('misure', '', 'protezione'), ('libertà', '', 'espressione', '', 'popolo')]

所需的输出是

[('misure', 'protezione'), ('libertà', 'espressione', 'popolo')] ### without ''

3 个答案:

答案 0 :(得分:2)

您可以使用ast.literal_eval将字符串转换为元组列表

>>> from ast import literal_eval
>>> l = literal_eval("[('misure', 'di', 'protezione'), ('libertà', 'di', 'espressione')]")

然后使用列表理解从第一个和最后一个元素中生成新元组

>>> [(i[0], i[-1]) for i in l]
[('misure', 'protezione'), ('libertà', 'espressione')]

然后str从元组列表中创建一个字符串

>>> str([(i[0], i[-1]) for i in l])
"[('misure', 'protezione'), ('libertà', 'espressione')]"

修改
如果要删除字符串'di'的所有实例,这是相同的想法,您可以使用列表推导

>>> [tuple(i for i in j if i != 'di') for j in l]
[('misure', 'protezione'), ('libertà', 'espressione', 'popolo')]

编辑2
更一般地说,如果你想要排除<{1}}介词

set

答案 1 :(得分:1)

元组是不可变的,因此一旦创建就无法更改它们。你可以创建新的。试试这个:

[tuple(j for j in i if 'di' not in j) for i in a]

Here是工作演示。

答案 2 :(得分:1)

[tuple(j for j in i if 'di' != j) for i in li]

我修改了sam2090代码,因为字符串'di'可以是像'dim'这样的单词的一部分