删除 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'
这样的单词的一部分
我有一个这种格式的文件
[('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'
这样的单词的一部分