2

今日、リストの要素のすべての可能な組み合わせを取得する方法を実装するときに奇妙なエラーが発生しましたか? Dan Hによるソリューション。このエラーが発生し続けます:

TypeError: 'itertools.combinations' オブジェクトは呼び出し可能ではありません

これがなぜなのか、どうすれば修正できるのか誰か知っていますか? 次のコードを使用します。

def all_subsets(ss):
           return chain(*map(lambda x: combinations(ss, x), range(0, len(ss)+1)))

for subset in all_subsets([1,2,3,4]):

この後、エラーが発生します。誰でも私を助けることができますか?

EDIT1:

人々は完全なコードを求めたので、ここにコードエラーの関連部分があります:

from scapy.all import *
import itertools
from itertools import *

def all_combinations(input):
  return chain(*map(lambda y: combinations(input, y), range(0, len(input)+1)))

extensionHeader=["IPv6ExtHdrHopByHop","IPv6ExtHdrRouting","IPv6ExtHdrDestOpt","IPv6ExtHdrFragment"]
ip=IPv6(src="2a00:1450:4009:807::1002", dst="2a00:1450:4009:807::1002")
combinations = itertools.combinations(extensionHeader, 1)


for subset in all_combinations(extensionHeader):
    index=0
    finalForm=""
    while index<len(subset):
        substring=subset[index:index+17]
        if substring is "IPv6ExtHdrRouting":
            if index==0:
                ip.nh=43

また、完全なエラーは次のとおりです。

WARNING: No route found for IPv6 destination :: (no default route?)
Traceback (most recent call last):
  File "C:\Users\Martinooos\workspace\testing\scapyTest.py", line 18, in <module
>
    for subset in all_combinations(extensionHeader):
  File "C:\Users\Martinooos\workspace\testing\scapyTest.py", line 11, in all_com
binations
    return chain(*map(lambda y: combinations(input, y), range(0, len(input)+1)))
  File "C:\Users\Martinooos\workspace\testing\scapyTest.py", line 11, in <lambda
>
    return chain(*map(lambda y: combinations(input, y), range(0, len(input)+1)))
TypeError: 'itertools.combinations' object is not callable
4

1 に答える 1

2

編集:

これはあなたの問題です:

combinations = itertools.combinations(extensionHeader, 1)

combinations()で関数を使用しようとすると、Python は組み合わせ変数を関数として使用しようとするため、結果を組み合わせに保存したくないためall_combinations()、エラーが発生します。

「itertools.combinations」オブジェクトは呼び出し可能ではありません

修正するには、変数の名前を次のように別の名前に変更するだけです。

combs = itertools.combinations(extensionHeader, 1)

または、単にではなくall_combinations()使用するように変更します:itertools.combinationscombinations

def all_combinations(input):
  return itertools.chain(*map(lambda y: itertools.combinations(input, y), range(0, len(input)+1)))
于 2013-07-20T03:07:19.807 に答える