如何让python通过数组而不是字符串进行枚举

我希望通过一个名为Zones的数组进行枚举;在每个区域内,当我创建一个名为snotelIDX的新变量时,我希望通过另一个数组zoneIDX{X}(X是Zones数组的索引)进行枚举,然后尝试通过与其关联的数组进行枚举通过字符串而不是数组进行枚举

选择 | 换行 | 行号
  1. zones=["Zone 1 - Yellowstone NP","Zone 2 - Absaroka Mtns","Zone 7 - Owl Creek/Bridger Mtns","Zone 8 - Bighorn Mtns West"]
  2. ##  Snotels in Zone 1 - Yellowstone NP
  3. zoneIDX0=["CANYON","LEWIS LAKE DIVIDE","SNAKE RIVER STATION","SYLVAN LAKE","SYLVAN ROAD","THUMB DIVIDE","TWO OCEAN PLATEAU"]
  4. ## Snotels in Zone 2 - Absaroka Mtns
  5. zoneIDX1=["BEARTOOTH LAKE","BLACKWATER","BURROUGHS CREEK","CASTLE CREEK","EVENING STAR","KIRWIN","MARQUETTE","PARKER PEAK","TIMBER CREEK","WOLVERINE","YOUNTS PEAK"]
  6. ## Snotels in Zone 7 - Owl Creek/Bridger Mtns
  7. zoneIDX2=["OWL CREEK"]
  8. ## Snotels in Zone 8 - Bighorn Mtns West
  9. zoneIDX3=["BALD MOUNTAIN","BONE SPRINGS DIVIDE","POWDER RIVER PASS","SHELL CREEK"]
  10.  
  11. for j, v in enumerate(zones):
  12.         IDX = j
  13.         snotelIDX = "zoneIDX" + str(IDX)
  14.         for k, w in enumerate(snotelIDX):
  15.  

如果我打印snotelIDX,它会打印正确的内容
区域IDX0
区域IDX1
ZoneIDX2等
而是通过s n o t e l i d x进行枚举
谢谢

# 回答1


Python正在做您告诉它做的事情。您正在将字符串赋值给变量
Snote 1IDX
。字符串是类似于列表的序列。您是否尝试将中的每个元素
区域
到变量标识符中吗?如果是这样的话,可以使用GLOBALS().update()或
EXEC()

选择 | 换行 | 行号
  1. for j, v in enumerate(zones):
  2.     globals().update({"snote1%s" % j: v})
  3.     for k, w in enumerate(v):
  4.         print "snote1%s" % j, w
  5.  
  6. # another way
  7. for j, v in enumerate(zones):
  8.     exec "snote2%s=v" % (j)
  9.  

请注意
V
中的子列表的引用。
区域
因此,任何对
V
还将修改中的子列表
区域

或者你是有意这样做的:

选择 | 换行 | 行号
  1. for j, v in enumerate(zones):
  2.         IDX = j
  3.         snotelIDX = "zoneIDX" + str(IDX)
  4.         for k, w in enumerate(v):
# 回答2


我想要的是通过区域枚举,并在每个区域内通过区域输出的zoneIDX进行枚举。
1区-黄石国家公园
峡谷
刘易斯湖分水岭
蛇河站
西尔万湖
希尔文道
拇指分开
两大洋高原
2区-Absaroka Mtns
熊牙湖
黑水公司
巴鲁斯克里克
城堡溪
夜星
柯尔文
马凯特
帕克峰
木材小溪
金刚狼
杨茨峰
7区-猫头鹰溪/布里奇山
猫头鹰溪
8区-Bighorn Mtns West
秃顶的山
骨泉分割
粉河山口
贝壳溪
我试过这些建议,但没有正确地列举出来。
谢谢你的帮忙
# 回答3


您将使用两个彼此对应的列表。

选择 | 换行 | 行号
  1. zones=["Zone 1 - Yellowstone NP","Zone 2 - Absaroka Mtns","Zone 7 - Owl Creek/Bridger Mtns","Zone 8 - Bighorn Mtns West"]
  2. ##  Snotels in Zone 1 - Yellowstone NP
  3. zoneIDX0=["CANYON","LEWIS LAKE DIVIDE","SNAKE RIVER STATION","SYLVAN LAKE","SYLVAN ROAD","THUMB DIVIDE","TWO OCEAN PLATEAU"]
  4. ## Snotels in Zone 2 - Absaroka Mtns
  5. zoneIDX1=["BEARTOOTH LAKE","BLACKWATER","BURROUGHS CREEK","CASTLE CREEK","EVENING STAR","KIRWIN","MARQUETTE","PARKER PEAK","TIMBER CREEK","WOLVERINE","YOUNTS PEAK"]
  6. ## Snotels in Zone 7 - Owl Creek/Bridger Mtns
  7. zoneIDX2=["OWL CREEK"]
  8. ## Snotels in Zone 8 - Bighorn Mtns West
  9. zoneIDX3=["BALD MOUNTAIN","BONE SPRINGS DIVIDE","POWDER RIVER PASS","SHELL CREEK"]
  10. zone_desc = [zoneIDX0, zoneIDX1, zoneIDX2, zoneIDX3]
  11.  
  12. for ctr in range(len(zones)):
  13.     print zones[ctr]
  14.     for descr in zone_desc[ctr]:
  15.         print "     ", descr 
# 回答4


非常感谢您;您的代码建议运行得很好,这正是我想要的。
谢谢你抽出时间来帮我!

标签: python

添加新评论