如何编辑列表中列表中的项目?

时间:2014-03-04 05:01:08

标签: python list indexing

我正在尝试在python中模拟社交网络,接下来是网络的初始构建。这完全符合我的要求,因为它将以25%的几率随机连接网络中的两个人,如果它将第一个人与第二个人连接,它将始终将第二个人与第一个人连接(反之亦然)然后我可以打印网络,看谁与谁有联系。

我遇到的问题是我需要能够添加尽可能多的人,但这涉及到列表中的列表,我无法弄清楚如何更改项目的值列表中的列表,而不是先定义每个列表。这是代码

from random import randint  

network = []
person0 = range(0,2)
person1 = range(0,2)

for x in range(len(person0)):
    for randint(0,100)<25 and person0[x]!=0:
        person0[x]="connected"
    else:
        person0[x]=0

for y in range(len(person1)):
if randint(0,100)<25 and person1[y]!=1:
    person1[y]="connected"
else:
    person1[y]=0

if person0[1]=="connected":
    person1[0]="connected"
if person1[0]=="connected":
    person0[1]="connected"

network.append(person0)
network.append(person1)
print network  

这会返回[[0,'connected'],['connected',0]]或[[0,0],[0,0]],两者都可以接受,但我不想要手动添加person2,person3,person4等,手动测试每个比较,并手动附加它们。我该怎么做?

2 个答案:

答案 0 :(得分:0)

我认为你要求的是在一个单独的循环中创建列表:

network = [range(N) for i in range(N)]

然后network[i]指的是一个人。 network[0]相当于person0

这就是整个事情。

from random import randint  

N = 2
network = [range(N) for i in range(N)]

for y in range(N):
    person = network[y]
    for x in range(len(person)):
        if randint(0,100)<25 and network[x]:
            person[x] = "connected"
        else:
            person[x] = 0

for i in range(N):
    for j in range(N):
        if network[i][j] == "connected":
            network[j][i] = "connected"

print network

答案 1 :(得分:0)

您需要先创建列表(network),然后再建立连接

from random import randint  

network = []

numberofpersons = 3
network = [range(numberofpersons) for i in range(numberofpersons)]

for i in range(numberofpersons):
    for j in range(numberofpersons):
        if randint(0,100)<25 and j!=i:
            network[i][j]="connected"
            network[j][i]="connected"
        else:
            network[i][j]=0
            network[j][i]=0


print network  
# [[0, 0, 'connected'], [0, 0, 'connected'], ['connected', 'connected', 0]]