我正在尝试在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等,手动测试每个比较,并手动附加它们。我该怎么做?
答案 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]]