我有许多公司的董事数据,但有时候"XYZ的董事John Smith"和"ABC的董事John Smith"是同一个人,有时他们不是.此外,"XYZ的导演约翰J.史密斯"和"ABC的导演约翰史密斯"可能是同一个人,也可能不是.通常检查附加信息(例如,关于"约翰史密斯,XYZ主任"和"约翰史密斯,ABC主任"的传记数据的比较)使得有可能解决两个观察是否是同一个人.
本着这种精神,我正在收集识别匹配对的数据.例如,假设我有以下匹配对:{(a, b), (b, c), (c, d), (d, e), (f, g)}.我想使用关系"与人相同"的传递属性来生成"连通组件" {{a, b, c, d, e}, {f, g}}.那是{a, b, c, d, e}一个人,{f, g}是另一个人.(该问题的早期版本提到了"派系",这显然是别的东西;这可以解释为什么find_cliques在networkx给出"错误"结果(为了我的目的).
以下Python代码完成了这项工作.但我想知道:是否有更好的(计算成本更低)方法(例如,使用标准或可用的库)?
这里和那里似乎有相关的例子(例如,python中的Cliques),但这些是不完整的,所以我不确定他们指的是什么库或如何设置我的数据来使用它们.
def get_cliques(pairs):
from sets import Set
set_list = [Set(pairs[0])]
for pair in pairs[1:]:
matched=False
for set in set_list:
if pair[0] in set or pair[1] in set:
set.update(pair)
matched=True
break
if not matched:
set_list.append(Set(pair))
return set_list
pairs …Run Code Online (Sandbox Code Playgroud) 类似的问题已经被问过,但这些解决方案不为我用的情况下工作(例如,制作一个平面列表出Python列表的列表和压扁浅列表在Python,我已经是一个字符串列表和列表,其中嵌入列表也可以包含字符串和列表.我想将其转换为一个简单的字符串列表,而不将字符串拆分为字符列表.
import itertools
list_of_menuitems = ['image10', ['image00', 'image01'], ['image02', ['image03', 'image04']]]
chain = itertools.chain(*list_of_menuitems)
Run Code Online (Sandbox Code Playgroud)
结果清单:
['i', 'm', 'a', 'g', 'e', '1', '0', 'image00', 'image01', 'image02', ['image03', 'image04']]
Run Code Online (Sandbox Code Playgroud)
预期结果:
['image10', 'image00', 'image01', 'image02', 'image03', 'image04']
Run Code Online (Sandbox Code Playgroud)
什么是最好的(Pythonic)方法呢?
这个问题与之前的问题相关,但那里的答案(使用c()函数)正是对我不起作用的。
首先,我创建一个向量列表,然后创建一个附加向量。
a_list <- lapply(mtcars, as.integer)
junk <- c(1:length(a_list[[1]]))
Run Code Online (Sandbox Code Playgroud)
现在,如果使用c(a_list, junk)(如前面问题的答案中所建议的那样),我会得到一个与我所说的完全不同的答案a_list[["junk"]] <- junk(后者产生所需的结果)。似乎前一种方法添加的是as.list(junk).
如何添加junkusingc()而不将其转换为 的结果as.list(junk)?
这个问题不同于将列表/嵌套列表转换为不嵌套的列表(这会产生一组非常具体的响应,无法解决我的情况),也不同于许多“列表的扁平列表”答案。
我要列出一个列表,其中一些又是列表列表,然后“拉平”到列表列表(而不仅仅是列表!)。
作为一个具体的例子,我想从这里开始:
my_list_of_lists = [[1, 2, 3], [[9, 10], [8, 9, 10], [3, 4, 6]], [11, 12, 13]]
Run Code Online (Sandbox Code Playgroud)
对此
target_list_of_lists = [[1, 2, 3], [9, 10], [8, 9, 10], [3, 4, 6], [11, 12, 13]]
Run Code Online (Sandbox Code Playgroud)
(从视觉上讲,我想将外部列表中的所有[[和]] 内部分别转换为[和]。)