本文将介绍使用itertools的Python中的Powerset的详细情况,特别是关于python中itertools的用法的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个
本文将介绍使用itertools的Python中的Powerset的详细情况,特别是关于python中itertools的用法的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Itertools in python、itertools 中的 Python 排列、Itertools的问题-下一个函数(初级Python用户)、more_itertools 无法在 Python 3.6 中从 functools 导入cached_property的知识。
本文目录一览:- 使用itertools的Python中的Powerset(python中itertools的用法)
- Itertools in python
- itertools 中的 Python 排列
- Itertools的问题-下一个函数(初级Python用户)
- more_itertools 无法在 Python 3.6 中从 functools 导入cached_property
使用itertools的Python中的Powerset(python中itertools的用法)
我正在尝试在Python 3中创建电源集。我找到了对该itertools
模块的引用,并且使用了该页面上提供的电源集代码。问题:代码返回对itertools.chain
对象的引用,而我想访问Powerset中的元素。我的问题:如何实现?
在此先感谢您的见解。
答案1
小编典典itertools
函数返回 迭代器
,即按需延迟生成结果的对象。
您可以通过循环遍历对象,也可以for
通过调用对象将结果转换为列表list()
:
from itertools import chain, combinationsdef powerset(iterable): "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)" s = list(iterable) return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))for result in powerset([1, 2, 3]): print(result)results = list(powerset([1, 2, 3]))print(results)
您也可以将对象存储在变量中,并使用该next()
函数从迭代器中逐个获取结果。
Itertools in python
Itertools in python
- 定义
- Itertools:Functions creating iterators for efficient looping(是一系列函数,用来创建迭代器,是为了更有效的循环。
- 迭代器:可以看成是一个for循环的封装。有无限循环和有限循环
举个例子:
// 无限循环迭代器cycle
cycle('ABCD') --> A B C D A B C D ...
- 对于Itertool functions,它是用来创建和返回一个迭代器。
# itertools.chain(*iterables) 创建一个迭代器
def chain(*iterables):
# chain('ABC', 'DEF') --> A B C D E F
for it in iterables:
for element in it:
yield element
# classmethod chain.from_iterable(iterable) 类似chain()
def from_iterable(iterables):
# chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
for it in iterables:
for element in it:
# yield 相当于return, 只是它返回的是一种iterator
yield element
- 通俗来说,这两个迭代器可以把它看作是把这些列表打碎了给它的元素提取出来。也可以看作是flatten扁平化的一个过程。
举例:
# output: [{'a': 0}, {'b': 1}, {'c': 2}, {'d': 3}]
ite = itertools.chain.from_iterable(
[
[{'a':0}, {'b':1}],
[{'c':2}],
[{'d':3}]
]
)
print(list(ite))
-
总结
所以当结构嵌套多层的时候,可以用这个迭代器的方法高效遍历。 -
可以继续学习的点:
迭代器结合map,用法更高效。
参考文献
https://docs.python.org/zh-cn/3/library/itertools.html#itertools.chain
itertools 中的 Python 排列
如何解决itertools 中的 Python 排列?
任务
给你一个字符串。 您的任务是按字典排序顺序打印字符串大小 k 的所有可能排列。
输入格式:
一行包含空格分隔的字符串 S 和整数值 k。
约束:
0<k<=len(S)
。该字符串仅包含大写字符。
输出格式
在单独的行上打印字符串 S 的排列。
样本输入:
HACK 2
样本输出
AC
AH
AK
CA
CH
CK
HA
HC
HK
KA
KC
KH
我的代码:
from itertools import permutations
k,s=input().split()
for i in sorted(list(permutations(s.upper(),int(k)))):
print("".join(i))
我收到此错误:
Traceback (most recent call last):
File "/tmp/submission/20210723/08/54/hackerrank-3eed224fdadc2fbdec48f75b70fd9419/code/Solution.py",line 4,in <module>
for i in sorted(list(permutations(s.upper(),int(k)))):
ValueError: invalid literal for int() with base 10: ''HACK''
怎么办?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
Itertools的问题-下一个函数(初级Python用户)
使用索引df_curr = df_curr[sorted(df_curr)]
来跟踪当前歌曲,在循环之前使用current_song_index
对其进行初始化,并在每条“ next”命令中将其前进。
0
more_itertools 无法在 Python 3.6 中从 functools 导入cached_property
我尝试使用以下命令从 visual studio 代码中的终端运行grade_analysis.py:
~/documents/school/ml4t_2023fall/assess_portfolio$ pythonpath=../:. python grade_analysis.py 根据班级设置说明
但是,当我运行命令时,grade_analysis.py 似乎无法提升级别并从 grading.grading.py 文件中获取信息。
我使用这个命令是错误的还是遗漏了什么?
这是我收到的错误:
立即学习“Python免费学习笔记(深入)”;
2023fall/assess_portfolio$ pythonpath=../:. python grade_analysis.py traceback (most recent call last): file "grade_analysis.py", line 20, in <module> import pytest file "/home/clopez/miniconda3/envs/ml4t/lib/python3.6/site-packages/pytest.py", line 34, in <module> from _pytest.python_api import approx file "/home/clopez/miniconda3/envs/ml4t/lib/python3.6/site-packages/_pytest/python_api.py", line 13, in <module> from more_itertools.more import always_iterable file "/home/clopez/miniconda3/envs/ml4t/lib/python3.6/site-packages/more_itertools/__init__.py", line 3, in <module> from .more import * # noqa file "/home/clopez/miniconda3/envs/ml4t/lib/python3.6/site-packages/more_itertools/more.py", line 5, in <module> from functools import cached_property, partial, reduce, wraps importerror: cannot import name ''cached_property''
环境设置说明
conda 环境 yml
name: ml4t channels: - conda-forge - defaults dependencies: - python=3.6 - cycler=0.10.0 - kiwisolver=1.1.0 - matplotlib=3.0.3 - numpy=1.16.3 - pandas=0.24.2 - pyparsing=2.4.0 - python-dateutil=2.8.0 - pytz=2019.1 - scipy=1.2.1 - seaborn=0.9.0 - six=1.12.0 - joblib=0.13.2 - pytest=5.0 - pytest-json=0.4.0 - future=0.17.1 - pprofile=2.0.2 - pip - pip: - jsons==0.8.8 - gradescope-utils - subprocess32
等级分析.py
"""MC1-P1: Analyze a portfolio - grading script. Usage: - Switch to a student feedback directory first (will write "points.txt" and "comments.txt" in pwd). - Run this script with both ml4t/ and student solution in PYTHONPATH, e.g.: PYTHONPATH=ml4t:MC1-P1/jdoe7 python ml4t/mc1_p1_grading/grade_analysis.py Copyright 2017, Georgia Tech Research Corporation Atlanta, Georgia 30332-0415 All Rights Reserved """ import datetime import os import sys import traceback as tb from collections import OrderedDict, namedtuple import pandas as pd import pytest from grading.grading import ( GradeResult, IncorrectOutput, grader, run_with_timeout, ) from util import get_data # Student code # Spring ''16 renamed package to just "analysis" (BPH) main_code = "analysis" # module name to import # Test cases # Spring ''16 test cases only check sharp ratio, avg daily ret, and cum_ret (BPH) PortfolioTestCase = namedtuple( "PortfolioTestCase", ["inputs", "outputs", "description"] ) portfolio_test_cases = [ PortfolioTestCase( inputs=dict( start_date="2010-01-01", end_date="2010-12-31", symbol_allocs=OrderedDict( [("GOOG", 0.2), ("AAPL", 0.3), ("GLD", 0.4), ("XOM", 0.1)] ), start_val=1000000, ), outputs=dict( cum_ret=0.255646784534, avg_daily_ret=0.000957366234238, sharpe_ratio=1.51819243641, ), description="Wiki example 1", ), PortfolioTestCase( inputs=dict( start_date="2010-01-01", end_date="2010-12-31", symbol_allocs=OrderedDict( [("AXP", 0.0), ("HPQ", 0.0), ("IBM", 0.0), ("HNZ", 1.0)] ), start_val=1000000, ), outputs=dict( cum_ret=0.198105963655, avg_daily_ret=0.000763106152672, sharpe_ratio=1.30798398744, ), description="Wiki example 2", ), PortfolioTestCase( inputs=dict( start_date="2010-06-01", end_date="2010-12-31", symbol_allocs=OrderedDict( [("GOOG", 0.2), ("AAPL", 0.3), ("GLD", 0.4), ("XOM", 0.1)] ), start_val=1000000, ), outputs=dict( cum_ret=0.205113938792, avg_daily_ret=0.00129586924366, sharpe_ratio=2.21259766672, ), description="Wiki example 3: Six month range", ), PortfolioTestCase( inputs=dict( start_date="2010-01-01", end_date="2013-05-31", symbol_allocs=OrderedDict( [("AXP", 0.3), ("HPQ", 0.5), ("IBM", 0.1), ("GOOG", 0.1)] ), start_val=1000000, ), outputs=dict( cum_ret=-0.110888530433, avg_daily_ret=-6.50814806831e-05, sharpe_ratio=-0.0704694718385, ), description="Normalization check", ), PortfolioTestCase( inputs=dict( start_date="2010-01-01", end_date="2010-01-31", symbol_allocs=OrderedDict( [("AXP", 0.9), ("HPQ", 0.0), ("IBM", 0.1), ("GOOG", 0.0)] ), start_val=1000000, ), outputs=dict( cum_ret=-0.0758725033871, avg_daily_ret=-0.00411578300489, sharpe_ratio=-2.84503813366, ), description="One month range", ), PortfolioTestCase( inputs=dict( start_date="2011-01-01", end_date="2011-12-31", symbol_allocs=OrderedDict( [("WFR", 0.25), ("ANR", 0.25), ("MWW", 0.25), ("FSLR", 0.25)] ), start_val=1000000, ), outputs=dict( cum_ret=-0.686004563165, avg_daily_ret=-0.00405018240566, sharpe_ratio=-1.93664660013, ), description="Low Sharpe ratio", ), PortfolioTestCase( inputs=dict( start_date="2010-01-01", end_date="2010-12-31", symbol_allocs=OrderedDict( [("AXP", 0.0), ("HPQ", 1.0), ("IBM", 0.0), ("HNZ", 0.0)] ), start_val=1000000, ), outputs=dict( cum_ret=-0.191620333598, avg_daily_ret=-0.000718040989619, sharpe_ratio=-0.71237182415, ), description="All your eggs in one basket", ), PortfolioTestCase( inputs=dict( start_date="2006-01-03", end_date="2008-01-02", symbol_allocs=OrderedDict( [("MMM", 0.0), ("MO", 0.9), ("MSFT", 0.1), ("INTC", 0.0)] ), start_val=1000000, ), outputs=dict( cum_ret=0.43732715979, avg_daily_ret=0.00076948918955, sharpe_ratio=1.26449481371, ), description="Two year range", ), ] abs_margins = dict( cum_ret=0.001, avg_daily_ret=0.00001, sharpe_ratio=0.001 ) # absolute margin of error for each output points_per_output = dict( cum_ret=2.5, avg_daily_ret=2.5, sharpe_ratio=5.0 ) # points for each output, for partial credit points_per_test_case = sum(points_per_output.values()) max_seconds_per_call = 5 # Grading parameters (picked up by module-level grading fixtures) max_points = float(len(portfolio_test_cases) * points_per_test_case) html_pre_block = ( True # surround comments with HTML <pre> tag (for T-Square comments field) ) # Test functon(s) @pytest.mark.parametrize("inputs,outputs,description", portfolio_test_cases) def test_analysis(inputs, outputs, description, grader): """Test get_portfolio_value() and get_portfolio_stats() return correct values. Requires test inputs, expected outputs, description, and a grader fixture. """ points_earned = 0.0 # initialize points for this test case try: # Try to import student code (only once) if not main_code in globals(): import importlib # * Import module mod = importlib.import_module(main_code) globals()[main_code] = mod # Unpack test case start_date_str = inputs["start_date"].split("-") start_date = datetime.datetime( int(start_date_str[0]), int(start_date_str[1]), int(start_date_str[2]), ) end_date_str = inputs["end_date"].split("-") end_date = datetime.datetime( int(end_date_str[0]), int(end_date_str[1]), int(end_date_str[2]) ) symbols = list( inputs["symbol_allocs"].keys() ) # e.g.: [''GOOG'', ''AAPL'', ''GLD'', ''XOM''] allocs = list( inputs["symbol_allocs"].values() ) # e.g.: [0.2, 0.3, 0.4, 0.1] start_val = inputs["start_val"] risk_free_rate = inputs.get("risk_free_rate", 0.0) # the wonky unpacking here is so that we only pull out the values we say we''ll test. def timeoutwrapper_analysis(): student_rv = analysis.assess_portfolio( sd=start_date, ed=end_date, syms=symbols, allocs=allocs, sv=start_val, rfr=risk_free_rate, sf=252.0, gen_plot=False, ) return student_rv result = run_with_timeout( timeoutwrapper_analysis, max_seconds_per_call, (), {} ) student_cr = result[0] student_adr = result[1] student_sr = result[3] port_stats = OrderedDict( [ ("cum_ret", student_cr), ("avg_daily_ret", student_adr), ("sharpe_ratio", student_sr), ] ) # Verify against expected outputs and assign points incorrect = False msgs = [] for key, value in port_stats.items(): if abs(value - outputs[key]) > abs_margins[key]: incorrect = True msgs.append( " {}: {} (expected: {})".format( key, value, outputs[key] ) ) else: points_earned += points_per_output[key] # partial credit if incorrect: inputs_str = ( " start_date: {}\n" " end_date: {}\n" " symbols: {}\n" " allocs: {}\n" " start_val: {}".format( start_date, end_date, symbols, allocs, start_val ) ) raise IncorrectOutput( "One or more stats were incorrect.\n Inputs:\n{}\n Wrong" " values:\n{}".format(inputs_str, "\n".join(msgs)) ) except Exception as e: # Test result: failed msg = "Test case description: {}\n".format(description) # Generate a filtered stacktrace, only showing erroneous lines in student file(s) tb_list = tb.extract_tb(sys.exc_info()[2]) for i in range(len(tb_list)): row = tb_list[i] tb_list[i] = ( os.path.basename(row[0]), row[1], row[2], row[3], ) # show only filename instead of long absolute path tb_list = [row for row in tb_list if row[0] == "analysis.py"] if tb_list: msg += "Traceback:\n" msg += "".join(tb.format_list(tb_list)) # contains newlines msg += "{}: {}".format(e.__class__.__name__, str(e)) # Report failure result to grader, with stacktrace grader.add_result( GradeResult(outcome="failed", points=points_earned, msg=msg) ) raise else: # Test result: passed (no exceptions) grader.add_result( GradeResult(outcome="passed", points=points_earned, msg=None) ) if __name__ == "__main__": pytest.main(["-s", __file__])
我已激活 conda 环境并设置文件,以便它应该能够访问 util.py 文件和 grading.py 文件。
我希望运行命令后,analysis.py 文件将使用grade_analysis.py 进行评分。
正确答案
这就是为什么使用 conda-lock 锁文件(或容器化)比使用 yaml 更能实现长期可重复性。附加依赖项(如 more-itertools)在 yaml 中不受限制,并且其他包的依赖项可能没有适当的上限。在这种情况下,op 最终得到了 more_itertools 模块的一个版本,该模块引用了后来才添加到 functools 的内容。
二分法显示了从 more_itertools v10 开始的有问题的引用(对 cached_property),因此设置上限应该可以解决问题:
name: ml4t channels: - conda-forge - defaults dependencies: - python=3.6 - cycler=0.10.0 - kiwisolver=1.1.0 - matplotlib=3.0.3 - more-itertools<10 # <- prevent v10+ - numpy=1.16.3 - pandas=0.24.2 - pyparsing=2.4.0 - python-dateutil=2.8.0 - pytz=2019.1 - scipy=1.2.1 - seaborn=0.9.0 - six=1.12.0 - joblib=0.13.2 - pytest=5.0 - pytest-json=0.4.0 - future=0.17.1 - pprofile=2.0.2 - pip - pip: - jsons==0.8.8 - gradescope-utils - subprocess32
使用此 yaml,并测试导致错误的导入现在可以正常工作:
$ python -c "from more_itertools.more import always_iterable" $ echo $? 0
以上就是more_itertools 无法在 Python 3.6 中从 functools 导入cached_property的详细内容,更多请关注php中文网其它相关文章!
关于使用itertools的Python中的Powerset和python中itertools的用法的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Itertools in python、itertools 中的 Python 排列、Itertools的问题-下一个函数(初级Python用户)、more_itertools 无法在 Python 3.6 中从 functools 导入cached_property等相关知识的信息别忘了在本站进行查找喔。
本文标签: