我是python和数据分析的初学者,我有以下问题无法解决!
假设我有以下类型的变量,对象有以下内容:
0 [Julian Sims]
1 [Bernard Gillis]
2 [Damien Bell, Desmen Noble, Herman Seagers, La...
3 [Stacie Philbrook, Christopher Ratliffe, Antho...
4 [Danielle Imani Jameison, Maurice Eugene Edmon...
5 [Rebeika Powell, Kayetie Melchor, Misty Nunley...
6 [Greg Griego, Sara Griego, Zephania Griego, Ja...
7 []
8 []
9 [Deshaun Jones]
10 [Demetrius Davis]
...
...
...
有超过200000行,并且它们具有不同的大小。
我想做的是看看是否有任何名字被重复;显示重复的位置,并显示同一行中的所有其他名称。
我试着把每个名字一行存储在一个新的变量中,以便稍后分组,看看是否有重复的名字,但我不确定如何!
我尝试了下面的代码,但结果不是我想要的
names = []
row = str(name_list).split(",")
for x in row :
names.append(x)
但我得到了以下信息:
['0 [Julian Sims]n1 [Bernard Gillis]n2 [Damien Bell',
' Desmen Noble',
' Herman Seagers',
' La...n3 [Stacie Philbrook',
' Christopher Ratliffe',
' Antho...n4 [Danielle Imani Jameison',
' Maurice Eugene Edmon...n5 [Rebeika Powell',
' Kayetie Melchor',
' Misty Nunley...n6 [Greg Griego',
' Sara Griego',
' Zephania Griego',
' Ja...n7 []n8 []n9 [Deshaun Jones]n10 [Demetrius Davis]
我正在尝试创建一个图表来显示谁相互连接,如果有重复的
如果有更好的做事方法,请告诉我。
非常感谢
假设name_list
是整个文本,我将使用
lines = [line[line.find('[')+1:line.find(']')].split(',') for line in name_list]
以获取每行中的名称作为列表列表。这会找到左括号,然后将字符串从该括号切到右括号,并用逗号分隔内容
要访问第四行中的名称(如name_list中那样从零开始索引(,
>>>lines[4]
['Danielle Imani Jameison', 'Maurice Eugene Edmon...']
我不确定我是否理解你要去哪里,但如果你再解释一点,我很乐意帮忙。
编辑:
name_list = '''0 [Julian Sims]
1 [Bernard Gillis]
2 [Damien Bell, Desmen Noble, Herman Seagers, La...]
3 [Stacie Philbrook, Christopher Ratliffe, Antho...]
4 [Danielle Imani Jameison, Maurice Eugene Edmon...]
5 [Rebeika Powell, Kayetie Melchor, Misty Nunley...]
6 [Greg Griego, Sara Griego, Zephania Griego, Ja...]
7 []
8 [Sara Griego]
9 [Deshaun Jones]
10 [Demetrius Davis]'''.split('n')
lines = [[name.strip() for name in line[line.find('[')+1:line.find(']')].split(',')] for line in name_list]
names = [name.strip() for line in lines for name in line if name]
seen = set()
dups = set(name for name in names if name in seen or seen.add(name))
if len(dups) == 0: print("No duplicates.")
info = {name:[] for name in dups}
for i in range(len(lines)):
for name in dups:
if name in lines[i]: info[name].append(i)
print(info)
我稍微修改了您提供的数据样本,使其包含一个重复的数据,并为每行添加了括号(我假设真实数据是这样做的(。这段代码打印一个包含任何重复名称的对象,以及它们出现的行。示例数据的结果是{'Sara Griego': [6, 8]}
,这似乎就是您想要的?如果您希望使用两个名称列表而不是两个行号,则可以将外部for
循环更改为:
for line in lines:
for name in dups:
if name in line: info[name].append(line)
如果这里有什么东西与你的想法不符,请告诉我。