我有一个类似下面的功能。我尝试做的就是说我有checklist('sky high')
,然后输出产品将是30,19
而不是0,30,0,19
,就像我现在的代码所做的那样。如果我有checklist('blue sky')
,则输出结果将为0
。那么我该如何改变我的代码?
def checklist(argument):
data = [["sky",'79'],
["sky high",'30'],
["sky sky",'50'],
["sky high",'19']]
for row in data:
if argument == row[0]:
print row[1]
else:
print 0
答案 0 :(得分:3)
def checklist(argument):
data = [["sky",'79'],
["sky high",'30'],
["sky sky",'50'],
["sky high",'19']]
#create the list first
ans = [x[1] for x in data if x[0]==argument]
#If the list has 0 items then return 0 else return the str.join() version of list
return ", ".join(ans) if ans else 0
print checklist('sky high')
print checklist('blue sky')
<强>输出:强>
30, 19
0
答案 1 :(得分:0)
为什么不保留boolean
,以防没有符合您输入的行,并在最后检查boolean
?这将避免打印这么多0。
答案 2 :(得分:0)
你得到额外的0
行,因为每次项目不匹配时你在循环内print 0
。为了避免这种情况并使代码更清晰,我将使用稍微不同的数据结构(字典而不是列表列表)。像这样:
def checklist(argument):
data = {
"sky":['79'],
"sky high":['30', '19'],
"sky sky":['50']
}
results = data.get(argument)
if results is None:
print 0
else:
print('\n'.join(results))
checklist('sblue sky') # prints 0
checklist('sky high') # prints 30\n19
答案 3 :(得分:0)
如果当前元素不是else
,那么0
语句会导致循环打印argument
,这种情况发生了很多。
您必须制作单独的列表并在循环外检查:
results = []
for row in data:
if argument == row[0]:
results.append(row[1])
if results:
print ','.join(results)
else:
print 0
或者从你的元素中创建一个字典:
data_dict = {}
for key, value in data:
if key in data_dict:
data_dict[key].append(value)
else:
data_dict[key] = [value]
现在,您可以这样做:
key = 'sky high'
if key in data_dict:
print ','.join(data_dict[key])
else:
print 0
或者更简洁:
print ','.join(data_dict.get(key, ['0']))
答案 4 :(得分:0)
如果argument
不等于row[0]
,您似乎不希望发生任何事情,所以只需删除else语句即可。没有必要指定else
。
def checklist(argument):
data = [["sky",'79'],
["sky high",'30'],
["sky sky",'50'],
["sky high",'19']]
for row in data:
if argument == row[0]:
print row[1]
我误解了......现在我知道如果从来没有匹配你想要零。你可以试试这样的东西
def checklist(argument):
data = [["sky",'79'],
["sky high",'30'],
["sky sky",'50'],
["sky high",'19']]
result = ''
for row in data:
if argument == row[0]:
result += row[0]+','
if result:
print result[:-1] # This slice leaves off the last ','
else:
print '0'
请注意,这会比我的第一个答案略有不同。