我有一个函数响应不同,具体取决于我设置它作为输入的数组的方式。对于非工作方式,该功能仍然运行,但不正确
工作方式:
import numpy as np
array1 = ["something1", "a,b,c,9", "more", "b,c,4"]
array2 = ["something2", "4,3", "more", "1,a"]
array3 = ["something3", "z", "more", "9,1"]
array4 = ["something4", "1", "more", "z"]
real_array = np.array((array1,array2,array3,array4))
不工作方式:
import numpy as np
array = [["something1", "a,b,c,9", "more", "b,c,4"],["something2", "4,3", "more", "1,a"],["something3", "z", "more", "9,1"],["something4", "1", "more", "z"]]
real_array = np.array((array))
类似的不工作方式:
import numpy as np
import csv
array = []
reading = csv.reader(open('file.csv', 'rb'))
for row in reading:
array.append(row)
real_array = np.array((array))
显然,不工作的方式会更容易处理数据,因为我可以将行追加到array
,而其他方式必须手动完成。
两个数组都是相同的......那么为什么我的函数对它们的响应不同?
我的函数从文件中随机选择一行,然后检查第二列中的某些内容是否与前一个选择的最后一列中的某些内容相匹配。这里是:
def make_sequence(size,array):
count = 0
without_column = array[1::]
np.random.shuffle(without_column)
sequence = [without_column[0]]
result = [without_column[0][0]]
length = 0
while length < size:
np.random.shuffle(without_column)
start = without_column[0][1].split(',')
end = sequence[count][3].split(',')
i = 0
while i < len(start):
if start[i] in end:
sequence.append(without_column[0])
result.append(without_column[0][0])
count += 1
i = len(start)
else:
pass
i += 1
length = len(result)
return result
编辑2:应该发生什么
如果我执行此代码:
make_sequence(10,real_array)
我希望它每次都返回一个不同的数组,并且仅由第一列组成,但如果第二个项目的起始位置是第一个的结束位置之一,则只会将项目彼此相邻放置。这是一个例子:
如果选择的第一项是array3,则下一项只能是array1或array4,其他都不能。这是因为数组 3 的第 4 列是 9,1,这意味着后面唯一的数组必须在其第 2 列中有 9 或 1。
所以如果随机选择的第一项是array3,那么如果我运行这段代码:
make_sequence(2,real_array)
只能有以下输出可能性:
["something3","something4"]
[“某事3”,“某事1”]