比较两组数据,Intersection in Python
Comparing two sets of data with Intersection in Python
当比较两组 following_id 和 follower_id 时,return 结果似乎把所有东西都分开了。
import re
id1 = '[User(ID=1234567890, ScreenName=RandomNameHere), User(ID=233323490, ScreenName=AnotherRandomName), User(ID=4459284, ScreenName=YetAnotherName)]'
id2 = '[User(ID=1234467890, ScreenName=sdf), User(ID=233323490, ScreenName=AnotherRandomName), User(ID=342, ScreenName=443)]'
following_id = ', '.join( re.findall(r'ID=(\d+)', id1) )
follower_id = ', '.join( re.findall(r'ID=(\d+)', id2) )
a = list(set(following_id).intersection(follower_id))
print a
结果为 [' ', ',', '1', '0', '3', '2', '5', '4', '7', '6', '9', '8']
我希望结果是 ['233323490','54321']
,这是两组之间匹配的两个 ID。
以下对我有用:
list1 = [1234567890, 233323490, 4459284, 230, 200, 234, 200, 0002]
list2 = [1234467890, 233323490, 342, 101, 234]
a = list(set(list1).intersection(list2))
print a
结果为[233323490, 234]
这与 following_id 和 follower_id 的数据类型有关吗?
这是因为您用 .join
制作 strings
,而不是 lists
:
following_id = ', '.join( re.findall(r'ID=(\d+)', id1) )
follower_id = ', '.join( re.findall(r'ID=(\d+)', id2) )
print(following_id) # '1234567890, 233323490, 4459284'
print(follower_id) # '1234467890, 233323490, 342'
你只需要使用:
following_id = re.findall(r'ID=(\d+)', id1)
follower_id = re.findall(r'ID=(\d+)', id2)
因为 re.findall
已经 returns 了 list
场比赛。
following_id
和 follower_id
是字符串。将字符串转换为集合时,您将获得每个字符的集合:
>>> set('hello, there')
{' ', 'o', 't', 'e', 'r', 'h', ',', 'l'}
制作集合时,Python 不关心字符串中的逗号或空格...它只是遍历字符,将每个字符视为新集合中的一个项目。
您正在寻找一组字符串。所以你需要传递一些包含字符串的东西,然后变成一个集合。 re.findall
应该给你一个字符串列表。如果你不把它们连在一起,你应该可以走十字路口得到你要找的东西:
following_id = re.findall(r'ID=(\d+)', id1)
follower_id = re.findall(r'ID=(\d+)', id2)
a = list(set(following_id).intersection(follower_id))
当比较两组 following_id 和 follower_id 时,return 结果似乎把所有东西都分开了。
import re
id1 = '[User(ID=1234567890, ScreenName=RandomNameHere), User(ID=233323490, ScreenName=AnotherRandomName), User(ID=4459284, ScreenName=YetAnotherName)]'
id2 = '[User(ID=1234467890, ScreenName=sdf), User(ID=233323490, ScreenName=AnotherRandomName), User(ID=342, ScreenName=443)]'
following_id = ', '.join( re.findall(r'ID=(\d+)', id1) )
follower_id = ', '.join( re.findall(r'ID=(\d+)', id2) )
a = list(set(following_id).intersection(follower_id))
print a
结果为 [' ', ',', '1', '0', '3', '2', '5', '4', '7', '6', '9', '8']
我希望结果是 ['233323490','54321']
,这是两组之间匹配的两个 ID。
以下对我有用:
list1 = [1234567890, 233323490, 4459284, 230, 200, 234, 200, 0002]
list2 = [1234467890, 233323490, 342, 101, 234]
a = list(set(list1).intersection(list2))
print a
结果为[233323490, 234]
这与 following_id 和 follower_id 的数据类型有关吗?
这是因为您用 .join
制作 strings
,而不是 lists
:
following_id = ', '.join( re.findall(r'ID=(\d+)', id1) )
follower_id = ', '.join( re.findall(r'ID=(\d+)', id2) )
print(following_id) # '1234567890, 233323490, 4459284'
print(follower_id) # '1234467890, 233323490, 342'
你只需要使用:
following_id = re.findall(r'ID=(\d+)', id1)
follower_id = re.findall(r'ID=(\d+)', id2)
因为 re.findall
已经 returns 了 list
场比赛。
following_id
和 follower_id
是字符串。将字符串转换为集合时,您将获得每个字符的集合:
>>> set('hello, there')
{' ', 'o', 't', 'e', 'r', 'h', ',', 'l'}
制作集合时,Python 不关心字符串中的逗号或空格...它只是遍历字符,将每个字符视为新集合中的一个项目。
您正在寻找一组字符串。所以你需要传递一些包含字符串的东西,然后变成一个集合。 re.findall
应该给你一个字符串列表。如果你不把它们连在一起,你应该可以走十字路口得到你要找的东西:
following_id = re.findall(r'ID=(\d+)', id1)
follower_id = re.findall(r'ID=(\d+)', id2)
a = list(set(following_id).intersection(follower_id))