簡體   English   中英

在Python 3.1中修改特定的數組元素

[英]Modifying specific array elements in Python 3.1

我有兩個數組: arrayleast_common (過濾器數組)

下面的代碼遍歷array ,檢查與least_common匹配的least_common ,如果找到,則對其進行修改並將其附加到新數組中。

 for i in range (len(array)):
        for j in range(len(least_common)):
            if array[i] is least_common[j][0]:                
                new_array.append ((array[i]) + (array[i] * (mod[1]/100)))

但是,如果array中的元素不匹配least_common中的任何元素,我將不將其追加到new_array ,則迭代到array的下一個元素以再次開始檢查過程。

在Python中,您要嘗試使用列表完成。 還有另一種獨立的數據類型,稱為數組,但其目的完全不同。 請不要混淆並使用正確的術語列表。

列表可以循環訪問。 您無需從列表中索引元素,然后使用索引訪問它們。 那是C或C ++的工作方式,而不是python。

您在原始代碼中使用列表或稱為mod的字典。 覆蓋內置名稱是一個壞主意。 我試圖了解您在嘗試什么,提出了以下代碼。 更進一步,但是在此之前,我認為一些初學者教程也可能對您有所幫助。

new_array = []
somevalue = 0.001

for elem in array:
   for anotherelem in least_common:
            if elem == anotherelem[0]:
                    new_array.append(elem + (elem * somevalue))

這段代碼對我來說有點奇怪-我認為您想從以下類似內容開始:

lookup = set([x[0] for x in least_common])
new_array = []
for elem in array:
    if elem in lookup:
        new_array.append(elem + (elem * (mod[1]/100)))
    else:
        new_array.append(elem)

跟蹤是否使用布爾值找到了匹配項,布爾值在每個內部循環之前設置為False ,在if內設置為True 每次迭代后,如果仍然為False則意味着您沒有找到匹配項,然后應進行附加。

您還應該遵循@Andrew所說的,並使用for a in array:來遍歷列表for a in array: 如果需要索引,請for i, a in enumerate(array):使用for i, a in enumerate(array): 而且要知道, is不一樣的==

new_array = []
for array_item in array:
    found = False
    for least_common_item in least_common:
        if array_item is least_common_item:
            found = True
    if not found:
        new_array.append (array_item * (1 + mod[1]/100))

如果您打算使用==代替is也可以使用in大大縮短此代碼:

for array_item in array:
    if array_item not in least_common:
        new_array.append (array_item * (1 + mod[1]/100))

為什么不這樣:

least_common_set = frozenset(x[0] for x in least_common)
for e in array:
    if e is not in least_common_set:
        new_array.append(e + (e * (mod[1]/100)))

如果我正確理解您的問題,則可以采取以下解決方案:

for e in array:
    for lc in least_common:
        if e is lc[0]:
            new_array.append(e + e * (md[1] / 100))
            break
    else:
        new_array.append(e)

for循環中else子句在循環通過列表窮盡而終止時執行,但在循環由break語句終止時則不執行。

請注意,不需要使用rangelen ,在Python中,您可以僅在不涉及索引的情況下對序列的元素進行迭代-您可以為此使用enumerate ,但是在這種情況下則不需要。 另外,請不要對變量使用諸如mod類的內置名稱:在這里,我已將字典md重命名。

暫無
暫無

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

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