0
from visual import *

planet = ['merc','venus','earth','mars','jupiter','saturn','uranus','neptune']
planetv = [2, 3, 4, 5, 6, 7, 8, 9]
planetp = [10, 20, 30, 40, 50, 60, 70, 80]

基本的に、次のような新しい変数を作成したいと思います。

merc.m = 2
venus.m = 3
earth.m = 4

..。

merc.p = 10
venus.p = 20
earth.p = 30

..。

リストを変更せずplanetに、コードの後半で「merc」、「venus」などにアクセスする必要があるため。

4

4 に答える 4

4

私があなたを正しく理解していれば、 list で指定された名前でグローバル変数を作成し、各変数を属性およびplanetを持つオブジェクトにバインドし、リストおよびの値にそれぞれ設定する必要があります。mpplanetvplanetp

これが正しければ、次の方法があります。

# Create a class to represent the planets.  Each planet will be an
# instance of this class, with attributes 'm' and 'p'.
class Planet(object):
    def __init__(self, m, p):
        self.m = m
        self.p = p

# Iterate over the three lists "in parallel" using zip().
for name, m, p in zip(planet, planetv, planetp):
    # Create a Planet and store it as a module-global variable,
    # using the name from the 'planet' list.
    globals()[name] = Planet(m, p)

これで、次のことができます。

>>> merc
<__main__.Planet instance at 0x...>
>>> merc.m
2
>>> merc.p
10
于 2012-03-07T15:23:43.013 に答える
2

惑星は単なる文字列なので、属性を設定することはできません。さらに、フェルディナンドが示唆するように多くのグローバル変数を動的に作成することは、非常まれにしか良い考えではありませんdict

フェルディナンドの答えに基づいて、惑星の名前を属性として含めることをお勧めします(必要になることがわかると思います)。これで、これらのPlanetオブジェクトを adictまたは a list(順序を維持するため) に入れることができ、その時点でのニーズに合わせて、すべての関連情報をすぐに入手できます。

planet = ['merc','venus','earth','mars','jupiter','saturn','uranus','neptune']
planetv = [2, 3, 4, 5, 6, 7, 8, 9]
planetp = [10, 20, 30, 40, 50, 60, 70, 80]

class Planet(object):
    def __init__(self, name, m, p):
        self.name = name
        self.m = m
        self.p = p

planets = [Planet(name, m, p) for name, m, p in zip(planet, planetv, planetp)]
planet_dict = dict((p.name, p) for p in planets)

for p in planets:
    print "{0}: {1} {2}".format(p.name, p.m, p.p)
print "Mass of earth: {0}".format(planet_dict["earth"].m)

編集:以前の提案は忘れてください。考えが変わりました。

于 2012-03-07T15:29:22.143 に答える
0

簡単にするために、辞書を使用してマッピングを作成します。

このような -

planet = ['merc','venus','earth','mars','jupiter','saturn','uranus','neptune']
planetv=[2,3,4,5,6,7,8,9]
planetp=[10,20,30,40,50,60,70,80]

planet_map = {}

for i, p in enumerate(planet):
    planet_map[p] = {'m': planetv[i],
                     'p': planetp[i],
                    }

print planet_map

planet_map['merc']['m']これで、にアクセスできますplanet_map['merc']['p']

于 2012-03-07T15:24:54.093 に答える
0

辞書でこれを行うことを考えましたか?

planetv_dic = {'merc':2, 'venus': 3,'earth':4,'mars': 5,'jupiter': 6,'saturn': 7,'uranus': 8,'neptune': 9}

planetp_dic = {'merc':10, 'venus': 20,'earth':30,'mars': 40,'jupiter': 50,'saturn': 60,'uranus': 70,'neptune': 80}

または、すでにリストがある場合は、forループを使用して辞書を作成します。

 planetv_dic = {}
 planetp_dic = {}
 for i in xrange(len(planet)):
    planetv_dic[planet[i]] = planetv[i]
    planetp_dic[planet[i]] = planetp[i]

次に、次のようなものを使用して、惑星のリストにアクセスできます。

 planetv_dic.keys()
于 2012-03-07T15:28:58.383 に答える