我已经学习Python两周了 我创建了一个显示你的传记数据的功能。 我想知道如何将不同数据类型的对象放入一个字符串
如您所见,数据包括字符串,int和布尔值。 我希望能够将它们显示为单个字符串。到目前为止,我的功能只能单独显示它们:(' 1000000',' Bob',17,False) 我希望它显示如下:'< 1000000,Bob,17,False>'
def student_data(name, age, student_number, enrolled):
age = int(age)
true = "true"
false = "false"
# check to see if user is enrolled or not.
if enrolled == true:
enrolled = True
else:
enrolled = False
data = (student_number, name, age, enrolled,)
return (data)
data = student_data("Jana", 17, "1001291657", "false")
print (data)
答案 0 :(得分:4)
问题的简单答案'将不同类型的对象连接成字符串'是使用map:
>>> list_of_obj=['string', 1234, 123.4, {1:'one'}]
>>> map(str, list_of_obj)
['string', '1234', '123.4', "{1: 'one'}"]
或列表理解:
>>> [str(e) for e in list_of_obj]
['string', '1234', '123.4', "{1: 'one'}"]
在每种情况下,您都将内置函数str应用于列表中的每个对象。
但是,我可以建议写一个班来跟踪学生:
class Student(object):
def __init__(self, name, age, number, enrolled=True):
self.name=name
self.age=age
self.number=number
self.enrolled=enrolled
然后在类中添加一个方法,以便按照您希望的方式对其进行格式化:
# Note indentation to be part of the class definition of Student...
def __str__(self):
seq=(self.name, self.age, self.number, self.enrolled)
return '<{}>'.format(', '.join([str(e) for e in seq]))
然后创建一个学生:
>>> student1=Student('Bob Jones', 23, 12345, True)
然后格式就像你定义的那样:
>>> print student1
<Bob Jone, 23, 12345, True>
正如评论中所述,我发现重新定义true = "true"
和false = "false"
不是Pythonic,而是直接使用True
和False
。除了不要让别人(或你自己)感到困惑之外,主要的原因是你放松了Python的“真理”感。 vs&#39; falsey&#39;:
>>> false = "false"
>>> bool(false)
True
答案 1 :(得分:3)
您可以通过像这样转换对象来创建字符串列表
[str(i) for i in data]
然后,只需将join()方法与list一起加入即可。 代码的最后几行如下所示:
data = student_data("Jana", 17, "1001291657", "false")
string_data = ",".join([str(i) for i in data])
print("<{}>".format(string_data)) # adding brackets with format()
答案 2 :(得分:3)
如果你只想展示它们,只需使用这样的函数:
def student_data(name, age, student_number, enrolled):
print "name:{0}, age:{1}, student_number:{2}, enrolled :{3}".fromat(name, age, student_number, enrolled)
如果你想将它们全部转换成一个字符串,请使用:
def student_data(name, age, student_number, enrolled):
my_str=str(name)+','+str(age)+','+str(student_number)+','+str(enrolled)
return my_str
作为替代答案,最好将列表中的参数传递给函数,并使用map
和join
内置函数为此目标创建 pythonic 代码:
my_list = [name, age, student_number, enrolled]
def student_data(my_list):
return ','.join(map(str,mylist))