cry*_*ice 16 python string formatting
我正在尝试将字符串值列表输出为2列格式.将字符串列表制作成"普通文本"的标准方法是使用string.join方法.但是,它只需要2个参数,因此我只能使用"\n"创建一个列.我认为尝试创建一个只需在列之间添加选项卡的循环就可以了,但逻辑无法正常工作.
我发现一个ActiveState页面有一个相当复杂的方法,但它是从4年前开始的.现在有一种简单的方法吗?
编辑这是我要使用的列表.
skills_defs = ["ACM:Aircraft Mechanic", "BC:Body Combat", "BIO:Biology",
"CBE:Combat Engineer", "CHM:Chemistry", "CMP:Computers",
"CRM:Combat Rifeman", "CVE:Civil Engineer", "DIS:Disguise",
"ELC:Electronics","EQ:Equestrian", "FO:Forward Observer",
"FOR:Forage", "FRG:Forgery", "FRM:Farming", "FSH:Fishing",
"GEO:Geology", "GS:Gunsmith", "HW:Heavy Weapons", "IF:Indirect Fire",
"INS:Instruction", "INT:Interrogation", "JP:Jet Pilot", "LB:Longbow",
"LAP:Light Aircraft Pilot", "LCG:Large Caliber Gun", "LNG:Language",
"LP:Lockpick", "MC:Melee Combat", "MCY:Motorcycle", "MEC:Mechanic",
"MED:Medical", "MET:Meterology", "MNE:Mining Engineer",
"MTL:Metallurgy", "MTN:Mountaineering", "NWH:Nuclear Warhead",
"PAR:Parachute", "PST:Pistol", "RCN:Recon", "RWP:Rotary Wing Pilot",
"SBH:Small Boat Handling","SCD:Scuba Diving", "SCR:Scrounging",
"SWM:Swimming", "TW:Thrown Weapon", "TVD:Tracked Vehicle Driver",
"WVD:Wheeled Vehicle Driver"]
Run Code Online (Sandbox Code Playgroud)
我只想将此列表输出为简单的2列格式以减少空间.理想情况下,列之间应该有一个标准的空间,但我可以使用它.
ACM:Aircraft Mechanic BC:Body Combat
BIO:Biology CBE:Combat Engineer
CHM:Chemistry CMP:Computers
CRM:Combat Rifeman CVE:Civil Engineer
DIS:Disguise ELC:Electronics
EQ:Equestrian FO:Forward Observer
FOR:Forage FRG:Forgery
FRM:Farming FSH:Fishing
GEO:Geology GS:Gunsmith
HW:Heavy Weapons IF:Indirect Fire
INS:Instruction INT:Interrogation
JP:Jet Pilot LB:Longbow
LAP:Light Aircraft Pilot LCG:Large Caliber Gun
LNG:Language LP:Lockpick
MC:Melee Combat MCY:Motorcycle
MEC:Mechanic MED:Medical
MET:Meterology MNE:Mining Engineer
MTL:Metallurgy MTN:Mountaineering
NWH:Nuclear Warhead PAR:Parachute
PST:Pistol RCN:Recon
RWP:Rotary Wing Pilot SBH:Small Boat Handling
SCD:Scuba Diving SCR:Scrounging
SWM:Swimming TW:Thrown Weapon
TVD:Tracked Vehicle Driver WVD:Wheeled Vehicle Driver
Run Code Online (Sandbox Code Playgroud)
gim*_*mel 11
由制表符分隔的两列连接成行.在itertools中查找迭代器等价物,以实现节省空间的解决方案.
import string
def fmtpairs(mylist):
pairs = zip(mylist[::2],mylist[1::2])
return '\n'.join('\t'.join(i) for i in pairs)
print fmtpairs(list(string.ascii_uppercase))
A B
C D
E F
G H
I J
...
Run Code Online (Sandbox Code Playgroud)
哎呀......被S.Lott抓住了(谢谢).
更通用的解决方案,处理任意数量的列和奇数列表.从S.lott略微修改,使用发电机节省空间.
def fmtcols(mylist, cols):
lines = ("\t".join(mylist[i:i+cols]) for i in xrange(0,len(mylist),cols))
return '\n'.join(lines)
Run Code Online (Sandbox Code Playgroud)
data = [ ("1","2"),("3","4") ]
print "\n".join(map("\t".join,data))
Run Code Online (Sandbox Code Playgroud)
不如 ActiveState 解决方案灵活,但更短:-)
| 归档时间: |
|
| 查看次数: |
19893 次 |
| 最近记录: |