删除 python 中元组中的项目

delete item in a tuple in python

我有一个这种格式的文件

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

我想要的是从元组中去掉介词(di),return同样格式的结果。所以我创建了这个函数来做到这一点

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))

但是return这种格式的元组

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

需要的输出是

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

您可以使用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
更一般地说,如果你有 set 个介词你想排除

>>> prepositions = {'di', 'a', 'al'}
>>> [tuple(i for i in j if i not in prepositions) for j in l]
[('misure', 'protezione'), ('libertà', 'espressione', 'popolo')]

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

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

Here 是工作演示。

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

我修改了 sam2090 代码,因为字符串 'di' 可以是像 'dim'

这样的单词的一部分