簡體   English   中英

如何執行兩個python列表的逐元素子結構?

[英]How to perform element-wise substruction of two python lists?

我正在嘗試創建一個新列表,執行兩個 python 列表的逐元素子結構,如下所示:

from operator import add

number_villains_players = 0
villain_strength = []
player_strength = []
resulten_strength = []

def get_villain_strength(size):
    villain_strength = [int(x) for x in input("Enter {} numbers of space separated strength of Villains:".format(size)).split()]
    print(villain_strength)

def get_player_strength(size):

    player_strength = [int(x) for x in input("Enter {} numbers of space separated energy of Players:".format(size)).split()]
    print(player_strength)

def compare_strength():
    #resulten_strength = [m-n for (m,n) in zip(player_strength,villain_strength)]     #doesn't work
    #resulten_strength = [sum(x) for x in zip(player_strength, villain_strength)]     #doesn't work
    #resulten_strength = [list( map(add, player_strength, villain_strength) )]     #doesn't work
    resulten_strength = [a*b for a,b in zip(player_strength,villain_strength)]     #doesn't work
    print(resulten_strength)

def main():
    number_villains_players = input("How many Players/Villains?:")
    get_villain_strength(number_villains_players)
    get_player_strength(number_villains_players)
    compare_strength()
    if (i > 0 for i in resulten_strength):
        print("WIN")
    else:
        print("LOSE")

main()

但是print(resulten_strength)始終為空[][[]]

我遵循了以下所有可能的解決方案:

誰能指出我哪里出錯了?

您在方法中分配本地列表,它們不是全局的。 因此定義的頂行總是空的。 這應該可以解決您的問題:

def get_villain_strength(size):
    global villain_strength
    villain_strength = [int(x) for x in input("Enter {} numbers of space separated strength of Villains:".format(size)).split()]
    print(villain_strength)

然而,在任何地方使用全局變量都是不好的。 你可能想要一個有返回值的函數。


當您在函數內分配相同名稱的變量時,它將覆蓋全局變量的名稱,直到您從函數返回。 或者說如果你查找一個變量,它首先在locals()查找名稱,如果沒有找到,它會去globals() 如果仍然沒有找到,則會引發異常。

我不確定這就是你要找的。 我對你的代碼做了一個小的修改。 我刪除了您的變量聲明並修改了您的函數。

def get_villain_strength(size):
    villain_strength = [int(x) for x in input("Enter {} numbers of space separated strength of Villains:".format(size)).split()]
    print (villain_strength)
    return(villain_strength)

def get_player_strength(size):

    player_strength = [int(x) for x in input("Enter {} numbers of space separated energy of Players:".format(size)).split()]
    print (player_strength)
    return(player_strength)

def compare_strength(x,y):        
    resulten_strength = [a*b for a,b in zip(x,y)]     
    return(resulten_strength)

def main():
    number_villains_players = input("How many Players/Villains?:")
    x = get_villain_strength(number_villains_players)
    y = get_player_strength(number_villains_players)
    print (compare_strength(x,y))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM