[英]Modifying specific array elements in Python 3.1
我有兩個數組: array
和least_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
語句終止時則不執行。
請注意,不需要使用range
或len
,在Python中,您可以僅在不涉及索引的情況下對序列的元素進行迭代-您可以為此使用enumerate
,但是在這種情況下則不需要。 另外,請不要對變量使用諸如mod
類的內置名稱:在這里,我已將字典md
重命名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.