如何使用python在多维数组追加?

问题描述 投票:1回答:2

我有两个1-d数组:

tminus = [219 220 225 226 227 332]
tplus = [221 222 227 228 229 334]

和2- d数组:

t = [[222 224 228 244],[264 280 283 255 346]]

如何追加t对于那些在tminustplus之间的值?我想保持t为2-d阵列。我试过了:

time = []
for k in range(len(tminus)):
    for i in range(len(t)):
        for j in range(len(t[i])):
            if tminus[k] <= t[j] <= tplus[k]:
                time.append(t[j])
print time

但是,我得到的是空表。

有什么建议么?

python arrays loops append
2个回答
2
投票

在这一行:

if tminus[k] <= t[j] <= tplus[k]:

请注意,您拨打t[j],这将发现j内的tth元素。然而,t[j]将永远是一个列表,t是一个二维数组。

遍历内部t[i],使用子列表(t

t[i][j]

这得到在jith元素tth元素。

例如,如果i为0,j也为0,t[j]将返回[222, 224, 228, 244],你不能一个int比作list。相反,t[i][j]将返回222,这正是你瞄准。

因为你也想t的形状保持不变,创建一个临时变量(appendList),追加值是,然后附加整个列表t

然而,当前的代码,会造成不必要的名单,因为它会创建一个在tminus每个元素。为了避免这种情况,你可以切换的顺序进行循环,所以它只会造成appendList。此外,这可能会导致被追加单号多次,所以我们把它传递到set()删除重复,然后将其传递到list()再次把它变成一个列表。

更新的代码:

tminus = [219, 220, 225, 226, 227, 332]
tplus = [221, 222, 227, 228, 229, 334]
t = [[222, 224, 228, 244],[264, 280, 283, 255, 346]]

time = []
for i in range(len(t)): # Iterate over t
    appendList = [] # Stores values to be appended to time
    for j in range(len(t[i])): # Iterate over the sublists in t
        for k in range(len(tminus)): # Iterate over tminus
            if tminus[k] <= t[i][j] <= tplus[k]: # Check value
                appendList.append(t[i][j]) # Append value to appendList
    appendList = list(set(appendList)) # Remove duplicates
    time.append(appendList) # Append entire list to time
print(time)

这给出结果:[[228, 222], []]

注意事项: - 如果t已经重复的元素,只有其中一人将留 - 突入set()当订单丢失


1
投票

我真的不知道,如果这是你在找什么,但是从我的理解,这应该解决的问题。

index = 0
for i in range(0,len(t)):
    for j in range(0,len(t[index])):
        if max(tminus) <= t[i][j] <= min(tplus):
            time.append(t[i][j])
    index +=1
return time
© www.soinside.com 2019 - 2024. All rights reserved.