使用迭代列表元素命名循环中的变量

2024-06-01 13:06:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我浏览了相关的问题,但没有找到一个完全符合我的用例。你知道吗

我创建了两个列表(plistrlist):

list1 = [str(x).zfill(2) for x in range(101)]
plist = ['p{0}'.format(element) for element in list1]

rlist = [str(x).zfill(2) for x in range(51)]
rlist = ['r{0}'.format(element) for element in rlist]

每个列表如下所示:

>>> plist
['p00', 'p01', 'p02', 'p03'...'p100']

>>> rlist
['r00', 'r01', 'r02', 'r03'...'r50']

我已经设置了一些嵌套for循环来创建列表元素的排列。其思想是取plist的每个元素,并将其与rlist的每个元素相结合。这个过程一直重复,直到plist用尽。你知道吗

for pitem in range(len(plist)):
    vsdata = []
    for ritem in range(pitem, len(rlist)):
        if pitem == ritem:
            print("skipped")
        else:
            item1 = plist[pitem]
            item2 = rlist[ritem]
            vsdata.append([str(item1),str(item2)])
            print(item1 + " and " + item2)

由此产生:

skipped
p00 and r01
p00 and r02
p00 and r03
p00 and r04
p00 and r05
p00 and r06
p00 and r07
p00 and r08
p00 and r09
p00 and r10
...
p01 and r02
p01 and r03
p01 and r04
p01 and r05
p01 and r06
p01 and r07
p01 and r08
p01 and r09
p01 and r10

您会注意到,我还在嵌套循环之前声明了空列表vsdata。在嵌套循环再次开始并且vsdata被涉及plist的第二个元素的所有组合覆盖之前,这个列表应该附加一组排列(例如,第一个plist元素与所有rlist元素组合)并保存。你知道吗

因此,我需要在这之前“导出”vsdata,并使用plist的相关元素命名它。你知道吗

例如,在第二个循环运行两次之后,我应该有两个vsdata列表

>>> vsdata_p00
[['p00', 'r02'], ['p00', 'r03'], ['p00', 'r04'], ['p00', 'r05'], ['p00', 'r06'], ['p00', 'r07'], ['p00', 'r08'], ['p00', 'r09'], ['p00', 'r10'] ...

>>> vsdata_p01
[['p01', 'r02'], ['p01', 'r03'], ['p01', 'r04'], ['p01', 'r05'], ['p01', 'r06'], ['p01', 'r07'], ['p01', 'r08'], ['p01', 'r09'], ['p01', 'r10'] ...

我读过字典和集合,但不能完全理解它们在这里是如何实现的。最终我想把所有这些数据导出到csv中。谢谢你的帮助。你知道吗


Tags: andin元素列表forrangeelementplist
2条回答

如前所述,你可以使用字典。此外,所有操作都可以在一行中完成(牺牲一点可读性):

vsdata = {'p'+str(p).zfill(2):[['p'+str(p).zfill(2), 'r'+str(r).zfill(2)] for r in range(p+1,51)] for p in range(101)}

print vsdata['p37']
# [['p37', 'r38'], ['p37', 'r39'], ['p37', 'r40'], ['p37', 'r41'], ['p37', 'r42'], ['p37', 'r43'], ['p37', 'r44'], ['p37', 'r45'], ['p37', 'r46'], ['p37', 'r47'], ['p37', 'r48'], ['p37', 'r49'], ['p37', 'r50']]

像这样用字典可能有用:

vsdatas = {}
for pitem in range(len(plist)):
    vsdata = []
    for ritem in range(pitem, len(rlist)):
        if pitem == ritem:
            print("skipped")
        else:
            item1 = plist[pitem]
            item2 = rlist[ritem]
            vsdata.append([str(item1),str(item2)])
            print(item1 + " and " + item2)
    vsdatas[plist[pitem]] = vsdata

例如,要获取"p01"的排列列表,只需访问vdatas["p01"]。你知道吗

通常,您不希望动态地创建和命名变量。你知道吗

相关问题 更多 >