как преобразовать переменную в строку в Python - PullRequest
3 голосов
/ 03 февраля 2012

У меня есть проблема, похожая на эту, однако я не знаю, что такое термин

cat=5
dog=3
fish=7
animals=[cat,dog,fish]
for animal in animals:
    print animal_name+str(animal)  #by animal name, i mean the variable thats being used

Было бы распечатать,

cat5
dog3
fish7

Поэтому мне интересно, существует ли реальный метод или функция, которую я мог бы использовать, чтобы извлечь используемую переменную и преобразовать ее в строку. Надеемся, что это можно сделать без создания строк для каждого животного.

EDIT:

есть ли способ сделать это без словарей?

Ответы [ 6 ]

11 голосов
/ 03 февраля 2012

Вы в основном спрашиваете: «Как мой код может обнаружить имя объекта?»

def animal_name(animal):
    # here be dragons
    return some_string

cat = 5
print(animal_name(cat))  # prints "cat"

A цитата от Фредрика Лунда (на comp.lang.python): особенно уместно здесь.

Точно так же, как вы получаете имя того кота, которого вы нашли на крыльце: сам кот (объект) не может сказать вам свое имя, и ему все равно - так что единственный способвыяснить, как он называется, спросить всех ваших соседей (пространства имен), является ли это их кошка (объект)…

… .и не удивляться, если вы обнаружите, что он известен под многими именами, иливообще никакого имени!

Ради интереса я попытался реализовать animal_name с помощью модулей sys и gc и обнаружил, что окрестности также вызывали объект, который вы ласково называете "cat ", то есть буквальное целое число 5, под несколькими именами:

>>> cat, dog, fish = 5, 3, 7
>>> animal_name(cat)
['n_sequence_fields', 'ST_GID', 'cat', 'SIGTRAP', 'n_fields', 'EIO']
>>> animal_name(dog)
['SIGQUIT', 'ST_NLINK', 'n_unnamed_fields', 'dog', '_abc_negative_cache_version', 'ESRCH']
>>> animal_name(fish)
['E2BIG', '__plen', 'fish', 'ST_ATIME', '__egginsert', '_abc_negative_cache_version', 'SIGBUS', 'S_IRWXO']

Для достаточно уникальных объектов иногда вы можете получить уникальное имя:

>>> mantis_shrimp = 696969; animal_name(mantis_shrimp)
['mantis_shrimp']

Итак, в итоге:

5 голосов
/ 03 февраля 2012

Используйте словарь, а не набор переменных.

animals = dict(cat=5, dog=3, fish=7)

for animal, count in animals.iteritems():
    print animal, count

Обратите внимание, что они могут (возможно, не будут) появляться в том же порядке, в котором вы их вводите. Вы можете решить эту проблему, используя collections.ordereddict или просто путем сортировки ключей, если они вам просто нужны в согласованном порядке:

for animal in sorted(animals.keys()):
    print animal, animals[animal]
0 голосов
/ 03 февраля 2012

Вы путаете имя переменной со строкой имени животного:

Здесь:

cat = 7 

cat - переменная, 7 ее значение

В:

cat = 'cat'

переменная cat по-прежнему является переменной, а cat - строкой с именем животного.Вы можете поместить любую понравившуюся вам строку внутри кошки, даже cat = 'dog'.

Теперь вернемся к вашей проблеме: вы хотите распечатать имя животного и соответствующий ему номер.

Для сопоставления имении число лучший выбор - использовать dict, словарь.{ и } представляют собой dict (просто для завершения также set в некоторых случаях) :

d = {3: 'cat', 5: 'dog', 7: 'fish'}

d - ваша переменная.{3: 'cat', 5: 'dog', 7: 'fish'} это ваш словарь.3, 5, 7 - это ключи такого словаря, а 'cat', 'dog', 'fish' - соответствующие значения.
Теперь вам нужно перебрать этот словарь.Это можно сделать, позвонив по номеру d.items():

d = {3: 'cat', 5: 'dog', 7: 'fish'}
for key,value in d.items():
    print(value, key)

Я изменил значение, указав порядок печати ключей во время печати, чтобы напечатать имя перед номером.

0 голосов
/ 03 февраля 2012

Вместо того, чтобы помещать переменные в список, я бы поместил их в словарь.

d={}
d['cat']=5
d['dog']=3
d['fish']=7

for item in d.keys():
  print item+' '+d[item]
0 голосов
/ 03 февраля 2012
myAnimals = {'cat':5,'dog':3,'fish':7}
animals = ['cat','dog','fish']
for animal in animals:
    if myAnimals.has_key(animal): print animal+myAnimals(animal)
0 голосов
/ 03 февраля 2012

Я бы использовал словарную переменную, которая позволила бы вам легко сопоставлять имена строк со значениями.

animalDict['cat'] = 5
animalDict['dog'] = 3

Затем вы можете просматривать ключи и распечатывать, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...