请教一个关于list的问题~~

请教一个关于list的问题~~

请教一个问题,实在是困惑了好久~
listA = [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]
listB = [2,2,7,9,5,3,5,7,9,6]
listC = []
for i in listB:
        listC.append[listA[i]]
for i in listC:
        founction(i)
其中listA中的a1~~a10是前面定义好的list,founction也是一个定义好的方程
运行结果一直会出现一种很奇怪的现象就是对于listC中的相同元素结果永远是相同的。但是应该是不一样的~~请大家帮我看看这是什么原因啊
founction()对于相同的参数当然应该得到相同的结果,为什么你需要不同的结果?难道:

def f(n):
   return n+1

对于
f(2)与f(2)的结果需要不同吗?
哦~帖子里面忘记说了~sorry~~是这样的~
在那个function里面有很多随机产生的参数~~会影响到运行结果~
但是对于相同的自变量,运行结果是相同的,无一例外,似乎说明了,对于相同的自变量来说,这些function里面产生的随机变量也都是相同的~~这一点搞不太懂~~
哦~帖子里面忘记说了~sorry~~是这样的~
在那个function里面有很多随机产生的参数~~会影响到运行结果~
但是对于相同的自变量,运行结果是相同的,无一例外,似乎说明了,对于相同的自变量来说,这些function里面产生的随机变量也都是相同的~~这一点搞不太懂~~
那可以把执行过程通过print语句输出一下,看一看是不是参数有变化。跟踪一下。
整理了一下把code放上来了,如果有时间的话请大家帮我看一下~很短的~~嘿嘿
程序运行以后,对于selected中相同的元素,在evolved_pop中对应的元素总是相同的,这点很不理解~举个例子来说:
selected运行以后的结果是
[17, 8, 19, 10, 15, 11, 19, 3, 10, 4, 16, 15, 12, 10, 18, 8, 10, 0, 6, 19]
也就是evolved_pop中的第3个和第20个都是由init_pop中的第20个元素(init_pop[19])得来的,第14个和第17个元素都是通过init_pop 中第11个元素(init_pop[10])得到的,但是再经过chromosome_crossover以后得到的结果却是相同的。
然后检验evolved_pop[2]==evolved_pop[19]和evolved_pop[13]==evolved_pop[16]都是Ture
这个现象无一例外证明对于相同的选中的相同元素来说经过chromosome_crossover后的结果是相同的~而如果单独拿出来一个makeArray(1,0)产生的二维数组进行chromosome_crossover的话是很少会不变的~~
import operator
import random
import os

# Chance of crossover
crossover_rate = 0.99
# Chance of mutation
mutation_rate = 0.01
# Size of the population
population_size = 20

# Array generator to create the first generation
def makeArray(a, b):
        ROW = 18
        COL = 20
        A_PERC = .8
        B_PERC = .2
        total = ROW * COL
        tempList = [a] * int(total * A_PERC) + [b] * int(total * B_PERC)
        random.shuffle(tempList)
        return [tempList[COL*i:COL*i+COL] for i in range(ROW)]

# Make the elements in the array to crossover at crossover_rate
def bit_crossover(listA,listB):
        a = random.randint(0,19)
        b = random.randint(0,19)
        if a < b:
            pt1 = a
            pt2 = b
        else:
            pt1 = b
            pt2 = a
        if random.random() <= crossover_rate:
            tempA = listA[:pt1] + listB[pt1:pt2] + listA[pt2:]
            tempB = listB[:pt1] + listA[pt1:pt2] + listB[pt2:]
            listA = tempA
            listB = tempB
        return listA, listB

# Make the array to crossover
def chromosome_crossover(a):
        aux = range(len(a))
        for i in range(len(aux)/2):
            posit_1 = random.randrange(len(aux))
            index_1 = aux[posit_1]
            del aux[posit_1]
            posit_2 = random.randrange(len(aux))
            index_2 = aux[posit_2]
            del aux[posit_2]
            a[index_1], a[index_2] = bit_crossover(a[index_1],a[index_2])

init_pop = []
for i in range(population_size):
    init_pop.append(makeArray(1,0))
selected = []
for i in range(population_size):
    selected.append(random.randint(0,(population_size-1)))
templist = []
for i in range(len(selected)):
    templist.append(init_pop[selected[i]])
evolved_pop = []
for i in range(len(templist)):
    chromosome_crossover(templist[i])
    evolved_pop.append(templist[i])
print selected