簡體   English   中英

Python:在有條件地索引另一個列表中使用的列表變量

[英]Python: list variable used in conditional in indexing another list

在列表的索引中使用有條件但條件變量是列表本身的技術的名稱是什么? 如您所見, a是一個列表,但它用於檢查列表b中的相應元素。

>>> a = [ 1, 2, 3]
>>> b = [7, 7,7]

>>> b[a==1] = 8

>>> b
[8, 7, 7]

我當時使用numpy數組編寫代碼,並想看看核心Python是否包含相同的功能,事實證明它存在。 我只是無法搜索它,因為我絲毫不知道它叫什么。

編輯:我想知道被稱為什​​么,並且由於注釋表明代碼未按照我認為的去做,因此對正在發生的情況也作了解釋。

為清楚起見,這是我為numpy輸入的代碼,並得到了與Python列表類似的替換代碼。

>>> import numpy as np
>>> lower_green = np.array([0,180,0]) 
>>> upper_green = np.array([100,255,100])
>>> upper_green[lower_green == 0] = 7
>>> upper_green
array([  7, 255,   7])

解構表達式,我們得到:

  1. (False == 0) == True
  2. (a == 1) == False

鑒於此,我們得出以下結論:

b[a == 1] == b[False] == b[0]

您可以執行以下操作(並非在所有情況下都可行):

a = [ 1, 2, 3]
b = [7, 7, 7]
b[a.index(1)] = 8

output:
b = [8, 7, 7]

但是,如果有多個匹配元素,則index()方法僅返回最低的索引。 因此,在以下情況下將不起作用:

a = [0, 1, 1]
b = [7, 7, 7]
b[a.index(1)] = 8

output:
b = [7, 8, 7] and not [7, 8, 8]

但是,如果你想要做的使用Python核心是,這里有雲(采取的幫助這個答案):

# first get all the indices of the matching elements

a = [0, 1, 1]
b = [7, 7, 7]
to_match = 1
to_replace = 8

ind = [n for n,x in enumerate(a) if x == to_match]
for i in ind:
    b[i] = to_replace

a==1為假,與零相同

它與在numpy [1]中使用布爾數組不同。 (有時稱為邏輯索引)

[1] https://docs.scipy.org/doc/numpy-1.13.0/user/basics.indexing.html

暫無
暫無

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

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