我在追求:而不是像这样的列表输出:
['test1', 'test2', test3']
我希望它输出如下:
test1 | test2 | test3
或者这也没关系test1, test2, test3
我的代码:现在这就是它的样子:
deelnemers = []
# i add name, csgo and score to deelnemers[] via class Deelnemer
deelnemers.append(Deelnemer(naam, int(csgo), int(score)))
# key to sort it by csgo value
def keyCSGO(deelnemer):
return deelnemer.csgo
# i print it in reverse so the highest csgo number will be first
print("\nNaam | CSGO Score\n----------------\n", sorted(deelnemers, key=keyCSGO, reverse=True))
我尝试了什么:
print(", ".join("\nNaam | CSGO Score\n----------------\n", sorted(deelnemers, key=keyCSGO, reverse=True)))
所以很明显,上面给出的是.join只能有一个参数:join() takes exactly one argument (2 given)
所以我删除了naam | csgo部分测试出来:
print(", ".join(sorted(deelnemers, key=keyCSGO, reverse=True)))
但现在我得到了这个例外:sequence item 0: expected str instance, Deelnemer found
我认为我正朝着错误的方向前进,所以我不确定在哪里可以看到['' ]从列表中删除。感谢您的帮助和建议。
答案 0 :(得分:2)
str.join
只能加入字符串。希望Deelnemer
类定义了__str__
方法,然后你可以这样做:
print("Naam | CSGO Score\n----------------")
print(", ".join(map(str, sorted(deelnemers, key=keyCSGO, reverse=True))))
答案 1 :(得分:2)
使用str.join
的替代方法是让print
为您完成更多工作;很高兴字符串化和插入分隔符:
from operator import attrgetter
# Print header normally, but let print handle the newlines and separate lines
# so alignment of header and bar more obvious
# You original code was one hyphen short (which I fixed)
print("Naam | CSGO Score",
"-----------------", sep="\n")
# Use *-unpacking to convert sorted list to sequential positional arguments
# and pass sep=', ' to replace default sep of ' '.
# Use attrgetter instead of rolling your own key function
print(*sorted(deelnemers, key=attrgetter('csgo'), reverse=True), sep=', ')
答案 2 :(得分:1)
您只能加入字符串,因此您可能需要在排序后访问每个实例的name
属性(假设它是什么)以在join
中使用它们:
print(", ".join(d.name for d in sorted(deelnemers, key=keyCSGO, reverse=True)))
您还可以在使用字符串格式(来自@Tadhg)加入之前将属性放在字符串中:
", ".join("{0.name} {0.csgo} {0.score}".format(d) for d in sorted(deelnemers, key=keyCSGO, reverse=True))