目前我有一个字符串列表,让我们说:
list1 = [1,2,3,4]
我想将这个数字列表转换为相应的字母,使用:
output = [chr(ord((str(x+96)))) for x in list1]
当我这样做时,我得到一个错误,说程序期望字符串长度为1,但在我的代码中,它的字符串长度为3,因为每个数字转换为a后,''
周围都有output = [a,b,c,d]
串。转换为字符串是必要的,因为它必须是字符串格式才能使ord工作。
所以我的问题是你们如何解决这个问题和/或摆脱这些引用?
如果有人想知道,它应该是
So if there are 5 individuals the total individual comparisons would be
0,1,2, 0,1,3, 0,1,4, 1,2,3, 1,2,4 and 2,3,4
答案 0 :(得分:2)
你有一个整数,加上96,结果应该是:
output = [chr(x+96) for x in list1]
您可以完全放弃ord
和str
。
list1 = [1,2,3,4]
output = [chr(x+96) for x in list1]
print output #Prints: ['a', 'b', 'c', 'd']
答案 1 :(得分:2)
您的答案如下:
output = [chr((x+96)) for x in list1]
ord
接受一个字符并返回该字符的整数序号。在你的代码中,你正在做:
ord((str(x+96)))
就像,
ord((str(1+96)))
ord('97')
所以你得到了错误。
ord
的参数将是一个字符串。像:
>>> ord('a')
>>> 97
但要获得预期的输出,您不需要使用ord
。
答案 2 :(得分:1)
打印列表会打印其元素的字符串表示形式,其中包括列表中字符串元素周围的单引号。而只是自己格式化字符串:
>>> '[{}]'.format(','.join([chr((x+96)) for x in list1]))
'[a,b,c,d]'
或以印刷形式:
>>> print '[{}]'.format(','.join([chr((x+96)) for x in list1]))
[a,b,c,d]
format
方法允许您格式化字符串。在这种情况下,花括号用作占位符,以包含在最终字符串中的值。方括号是格式的一部分,用于提供类似于数组的实际输出。 join
方法接受一组对象并将它们连接在一起以形成单个组合字符串。在这种情况下,我使用文字逗号连接了几个对象。这会产生逗号分隔的字符串输出。内部列表理解本质上是您已经提供的代码。
答案 3 :(得分:0)
你能不能以理智的方式做到这一点
string = " abcdefghijklmnopqrstuvwxyz"
newlist = []
for num in nums:
newlist.append(string[num])
答案 4 :(得分:0)
假设您只想要打印字符串:
>>> list1 = [1, 2, 3, 4]
>>> pretty_string = ""
>>> # strings are immutable so need to
>>> # create new and assign to old variable name.
>>> for i in list1:
>>> pretty_string = pretty_string + str(i) + ", "
>>> pretty_string = pretty_string[:-2] # remove trailing comma and space
>>> print(pretty_string)
1, 2, 3, 4
str(i)
方法将i
转换为字符串
或者,打印您逐字询问的内容:
>>> print("output = [" + pretty_string + "]")
output = [1, 2, 3, 4]
但是,如果你想要一个整数列表元素的字符表示列表,那么:
>>> list1 = [1, 2, 3, 4] # integer values
>>> character_reps = []
>>> for i in list1:
>>> character_reps.append(str(i))
>>> for i in character_reps:
>>> print(i) # no need to convert as members already string types
1
2
3
4