0

コードを使用して作成した数字からリストを作成するのに問題があります。

ListA = [5,1,3,8,4]

LengthB = (len(ListA))


obj0 = ListA[0]
obj1 = ListA[1]
obj2 = ListA[2]
obj3 = ListA[3]
obj4 = ListA[4]

obj01 = int(obj0)
obj11 = int(obj1)
obj21 = int(obj2)
obj31 = int(obj3)
obj41 = int(obj4)

obj010 = obj01+obj11
obj110 = obj01+obj11+obj21
obj210 = obj11+obj21+obj31
obj310 = obj21+obj31+obj41
obj410 = obj31+obj41

ListBnum0 = (obj010 / 2)
ListBnum1 = obj110 / 3
ListBnum2 = obj210 / 3
ListBnum3 = obj310/ 3
ListBnum4 = obj410 / 2


print(ListBnum0)
print(ListBnum1)
print(ListBnum2)
print(ListBnum3)
print(ListBnum4)

FinalForm1 = str(ListBnum0)
FinalForm2 = str(ListBnum1)
FinalForm3 = str(ListBnum2)
FinalForm4 = str(ListBnum3)
FinalForm5 = str(ListBnum4)

基本的に、このプログラムは数字を取り、ListA数字の後ろの数字、数字と数字の平均を計算します (該当する場合)。私の本当の質問は、どうすれば数字から別のリストを作成して作成ListBnum(0)できるのでしょうか?ListBnum(4)

以下のエラーが返されるのはなぜですか?

ListB = list[ListBnum0,ListBnum1,ListBnum2,ListBnum3,ListBnum4]
4

1 に答える 1

4

あなたの質問に対する直接的な答えは次のとおりです。

new_list = [ListBnum0, ListBnum1, ListBnum2, ListBnum3, ListBnum4]

これを行うとエラーが発生する理由:

ListB = list[ListBnum0,ListBnum1,ListBnum2,ListBnum3,ListBnum4]

…それlistは関数であり、関数呼び出しにはそれらを呼び出すための括弧が必要です。次のように記述できます。

ListB = list([ListBnum0,ListBnum1,ListBnum2,ListBnum3,ListBnum4])

ただし、そうする理由はありません。このlist関数が行うことは、任意の iterable を引数として取り、同じ値を持つリストを返すことです。しかし[ListBnum0, …]すでにリストなので、理由もなくコピーを作成しているだけです。


一方、この全体のデザインは不格好です。リストを 5 つの個別の変数に分割して 1 つずつ処理し、リストにマージして戻すよりも、リスト全体を一度に処理する方が適切です。例えば:

ListA = [5,1,3,8,4]
List0 = [int(i) for i in ListA]
def avg(x):
    return sum(x) / len(x)
ListB = [avg(List0[max(i-1, 0):i+2]) for i in range(len(List0))]
ListFinal = [str(i) for i in ListB]
于 2013-10-04T23:36:23.363 に答える