Python 列表中只出现一次的单词索引

Python 列表中只出现一次的单词索引,python,string,list,indexing,Python,String,List,Indexing,我有下面的单词列表: x = ['Gaga', 'Gaga', 'Lam', 'Reem', 'Pal', 'Gaga','Lam'] 我需要删除只出现一次的单词,然后返回索引或位置 y = ['Gaga', 'Gaga', 'Lam', 'Gaga', 'Lam'] loc = [0, 0, 0, 1, 1, 0, 0] 任何简单的功能都可以做到这一点吗?您可以使用并隔离只出现一次的项目。然后使用列表理解来获得你想要的结果。该解决方案总体上是开放的,尽管它涉及3个过程 x = ['Gag

我有下面的单词列表:

x = ['Gaga', 'Gaga', 'Lam', 'Reem', 'Pal', 'Gaga','Lam']
我需要删除只出现一次的单词,然后返回索引或位置

y = ['Gaga', 'Gaga', 'Lam', 'Gaga', 'Lam']

loc = [0, 0, 0, 1, 1, 0, 0]
任何简单的功能都可以做到这一点吗?

您可以使用并隔离只出现一次的项目。然后使用列表理解来获得你想要的结果。该解决方案总体上是开放的,尽管它涉及3个过程

x = ['Gaga', 'Gaga', 'Lam', 'Reem', 'Pal', 'Gaga','Lam']

from collections import Counter

singles = {k for k, v in Counter(x).items() if v == 1}

y = [i for i in x if i not in singles]
loc = [int(i in singles) for i in x]

print(y, loc, sep='\n')

['Gaga', 'Gaga', 'Lam', 'Gaga', 'Lam']
[0, 0, 0, 1, 1, 0, 0]
您可以使用和隔离只显示一次的项目。然后使用列表理解来获得你想要的结果。该解决方案总体上是开放的,尽管它涉及3个过程

x = ['Gaga', 'Gaga', 'Lam', 'Reem', 'Pal', 'Gaga','Lam']

from collections import Counter

singles = {k for k, v in Counter(x).items() if v == 1}

y = [i for i in x if i not in singles]
loc = [int(i in singles) for i in x]

print(y, loc, sep='\n')

['Gaga', 'Gaga', 'Lam', 'Gaga', 'Lam']
[0, 0, 0, 1, 1, 0, 0]
您可以使用Counter类来实现以下目的:

from collections import Counter

x = ['Gaga', 'Gaga', 'Lam', 'Reem', 'Pal', 'Gaga','Lam']

c = Counter(x)

new_values = [item for item in x if c[item] > 1]
indexes = [1 if c[item] == 1 else 0 for item in x]

print(new_values)
print(indexes)
输出为:

['Gaga', 'Gaga', 'Lam', 'Gaga', 'Lam']
[0, 0, 0, 1, 1, 0, 0]
您可以使用Counter类来实现以下目的:

from collections import Counter

x = ['Gaga', 'Gaga', 'Lam', 'Reem', 'Pal', 'Gaga','Lam']

c = Counter(x)

new_values = [item for item in x if c[item] > 1]
indexes = [1 if c[item] == 1 else 0 for item in x]

print(new_values)
print(indexes)
输出为:

['Gaga', 'Gaga', 'Lam', 'Gaga', 'Lam']
[0, 0, 0, 1, 1, 0, 0]
备选一种带熊猫模块的衬里及其功能:

In [80]: x = ['Gaga', 'Gaga', 'Lam', 'Reem', 'Pal', 'Gaga','Lam']

In [81]: (~pd.Series(x).duplicated(keep=False)).astype(int).tolist()
Out[81]: [0, 0, 0, 1, 1, 0, 0]
要删除所有非重复项,请执行以下操作:

In [85]: s = pd.Series(x)

In [86]: s[s.duplicated(keep=False)].tolist()
Out[86]: ['Gaga', 'Gaga', 'Lam', 'Gaga', 'Lam']
备选一种带熊猫模块的衬里及其功能:

In [80]: x = ['Gaga', 'Gaga', 'Lam', 'Reem', 'Pal', 'Gaga','Lam']

In [81]: (~pd.Series(x).duplicated(keep=False)).astype(int).tolist()
Out[81]: [0, 0, 0, 1, 1, 0, 0]
要删除所有非重复项,请执行以下操作:

In [85]: s = pd.Series(x)

In [86]: s[s.duplicated(keep=False)].tolist()
Out[86]: ['Gaga', 'Gaga', 'Lam', 'Gaga', 'Lam']

你能创建一个新的列表,并使用它吗

x = ['Gaga', 'Gaga', 'Lam', 'Reem', 'Pal', 'Gaga','Lam']
loc = []
new_x = []

for name in x:
    if x.count(name) == 1:
        loc.append(1)
    else:
        loc.append(0)
        new_x.append(name)

你能创建一个新的列表,并使用它吗

x = ['Gaga', 'Gaga', 'Lam', 'Reem', 'Pal', 'Gaga','Lam']
loc = []
new_x = []

for name in x:
    if x.count(name) == 1:
        loc.append(1)
    else:
        loc.append(0)
        new_x.append(name)

您还可以使用列表理解

x = ['Gaga', 'Gaga', 'Lam', 'Reem', 'Pal', 'Gaga', 'Lam'] 
y = [name for name in x if x.count(name) != 1]
输出
['Gaga','Gaga','Lam','Gaga','Lam']

您也可以使用列表理解

x = ['Gaga', 'Gaga', 'Lam', 'Reem', 'Pal', 'Gaga', 'Lam'] 
y = [name for name in x if x.count(name) != 1]
输出
['Gaga','Gaga','Lam','Gaga','Lam']

你试过什么吗?你试过什么吗?请注意。但不是三元vs intc['item']==1的大粉丝。而且,由于您在两个列表理解中都测试了c[item]==1,所以效率比我的低。但不是三元vs intc['item']==1的大粉丝。此外,由于您在两个列表理解中都测试了c[item]==1,因此效率比我的低。次要的一点是,更好的做法是计算s.duplicatedkeep=False作为初始步骤,并在两个计算中使用它。但是对于一个好的Panda解决方案,仍然是+1。@当然,当将这两个值组合在一个公共块中时,应该预先计算s=pd.seriex和dups=s.duplicatedkeep=False。我将它们分离为一个linersMinor点,更好的方法是计算s.duplicatedkeep=False作为初始步骤,并在两个计算中使用它。但是对于一个好的Panda解决方案,仍然是+1。@当然,当将这两个值组合在一个公共块中时,应该预先计算s=pd.seriex和dups=s.duplicatedkeep=False。我把它们分开一行这个解决方案在列表的元素数量上有一个二次复杂度,这不是最好的解决方案这个解决方案在列表的元素数量上有一个二次复杂度,这不是最好的解决方案