【问题标题】:How can I edit an item in a list within a list?如何在列表中编辑列表中的项目?
【发布时间】:2014-04-05 11:29:36
【问题描述】:

我正在尝试在 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等,手动测试每个比较,手动追加。我该怎么做?

【问题讨论】:

    标签: python list indexing


    【解决方案1】:

    您需要先创建列表(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]]
    

    【讨论】:

    • 是的,我认为做到了!非常感谢!
    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 2021-12-15
      相关资源
      最近更新 更多