python-需要帮助以加快此功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-需要帮助以加快此功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2438字,纯文字阅读大概需要4分钟。
内容图文
![python-需要帮助以加快此功能](/upload/InfoBanner/zyjiaocheng/686/d14d986f3d4c4b46b44df06f4686fb7c.jpg)
输入:各种职位的清单.
[['61097', '12204947'],
['61097', '239293'],
['61794', '37020977'],
['61794', '63243'],
['63243', '5380636']]
输出:一个排序列表,其中包含列表中唯一数字的计数.
[4, 3, 3, 3, 3]
这个想法非常简单,我有一个列表列表,其中每个列表包含可变数量的职位(在我们的示例中,每个列表中只有2个,但是最多可以有10个列表).我想遍历每个列表,如果存在任何其他包含相同编号的列表,则该列表将附加到原始列表中.
示例:从上方获取输入数据并使用以下代码:
def gen_haplotype_blocks(df):
counts = []
for i in range(len(df)):
my_list = [item for item in df if any(x in item for x in df[i])]
my_list = list(itertools.chain.from_iterable(my_list))
uniq_counts = len(set(my_list))
counts.append(uniq_counts)
clear_output()
display('Currently Running ' +str(i))
return sorted(counts, reverse=True)
我得到了预期的输出.在这种情况下,当我循环浏览第一个列表[‘61097′,’12204947’]时,我发现我的第二个列表[‘61097′,’239293′]都包含’61097’,因此这些列表被串联在一起并形成[‘ 61097”,“ 12204947”,“ 61097”,“ 239293”].对于输出以下内容的每个列表,都将完成此操作:
['61097', '12204947', '61097', '239293']
['61097', '12204947', '61097', '239293']
['61794', '37020977', '61794', '63243']
['61794', '37020977', '61794', '63243', '63243', '5380636']
['61794', '63243', '63243', '5380636']
此列表完成后,我将计算每个列表中唯一值的数量,然后将其附加到另一个列表中,然后对最终列表进行排序并返回.
因此,对于[‘61097′,’12204947′,’61097′,’239293′],我们有两个’61097′,一个’12204947’和一个’239293’,它们等于3个唯一数字.
虽然我的代码有效,但速度非常慢.运行了将近两个小时,仍然只能运行约44k.
我正在寻找一种可以大大加快此功能的方法.最好不更改原始数据结构.我是python的新手.
提前致谢!
解决方法:
太大地提高了程序速度,尤其是对于较大的数据集.关键是使用哈希表或Python术语中的字典来存储不同的数字作为关键,并且每个唯一数字的行都作为值存在.然后在第二遍中,根据字典合并每行的列表,并计算唯一元素.
def gen_haplotype_blocks(input):
unique_numbers = {}
for i, numbers in enumerate(input):
for number in numbers:
if number in unique_numbers:
unique_numbers[number].append(i)
else:
unique_numbers[number] = [i]
output = [[] for _ in range(len(input))]
for i, numbers in enumerate(input):
for number in numbers:
for line in unique_numbers[number]:
output[i] += input[line]
counts = [len(set(x)) for x in output]
return sorted(counts, reverse=True)
从理论上讲,算法的时间复杂度为O(N * N),N为输入列表的大小.因为您需要将每个列表与所有其他列表进行比较.但是在这种方法中,复杂度为O(N),对于较大的数据集,它应该快得多.权衡是额外的空间复杂性.
内容总结
以上是互联网集市为您收集整理的python-需要帮助以加快此功能全部内容,希望文章能够帮你解决python-需要帮助以加快此功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。