根据条件,我需要从一个或另一个函数获取值。我试图把它放在一个简单的If ... Else
语句中。我尝试使用%s
字符串格式,但它不起作用。在代码下面,我会尝试做的更清楚:
if condition:
item = my_list['%s']
else:
item = my_other_list['%s']
# now I do something with this value:
print item % 3
这样,如果print
为True of False,我尝试condition
一个或其他列表的第三个值。这返回了有关列表索引为字符串的错误。所以我试着把它放在int()
里面没有什么帮助。
我该怎么办?问题是我得到的值以后比我声明item
是什么。
修改 我将在这里添加更多信息:
我有一个for
循环,遍历〜1000个元素并处理它们。如果condition
为True
,则会调用一个函数或另一个函数(如果为false)。现在,我不想1000次检查相同的条件,因为我知道它在这段时间内不会发生变化,并且想要检查一次并将该方法应用于所有元素。
更多代码:
if self.dlg.comboBox_3.currentIndex == 0:
item = QCustomTableWidgetItem(str(round((sum(values['%s'])/len(values['%s'])),2)))
else:
item = QCustomTableWidgetItem(str(round(sum(values['%s'],2))))
for row in range(len(groups)):
group = QTableWidgetItem(str(groups[row]))
qTable.setItem(row,0,group)
qTable.setItem(row,1,item % row)
这是实际的代码。不是'%s'
和'%行'。我之前使用过简化而不是分散实际问题,但我认为这是必要的。如果不是一个好的决定,我很抱歉。
答案 0 :(得分:2)
你对列表切片的工作原理有一个相当大的误解。它总是会在你调用它的时候发生,所以在你的if循环中,Python会尝试用文字字符串"%s"
对任一列表进行切片,这不可行。
没有必要这样做。您只需将列表指定为if语句的输出,然后直接对其进行切片:
if condition:
list_to_slice = my_list
else:
list_to_slice = my_other_list
# now I do something with this value:
print list_to_slice[3]
答案 1 :(得分:0)
'%s'
是字符串,而根据定义,列表索引应该是整数。
如果您确定字符串可以是整数,请使用int(string)
(如果不是,则会引发ValueError
)
答案 2 :(得分:0)
列表由indice引用的多个数据值组成。 所以,如果我像这样定义我的列表:
my_list = [apples, orange, peaches]
如果我想在列表中引用某些内容,我会像这样做
print(my_list[0])
这行代码的预期输出将是“苹果”。 要实际向列表添加新内容,您需要使用列表对象的内置方法,如下所示:
my_list.append("foo")
新列表将如下所示
[apples, orange, peaches, foo]
我希望这会有所帮助。
答案 3 :(得分:0)
我建议用这样的函数包装:
def get_item(index, list1, list2)
if condition:
return list1[index]
else:
return list2[index]
print get_item(3)
答案 4 :(得分:0)
这是一种紧凑的方式:
source = my_list if condition else my_other_list
print(source[2])
根据条件,这会将变量source
绑定到my_list
或my_other_list
。然后使用整数索引访问所选列表的第3个元素。如果您需要访问列表中的其他元素,此方法的优点是source
仍然绑定到列表。
另一种类似于你的方式是直接获取元素:
index = 2
if condition:
item = my_list[index]
else:
item = my_other_list[index]
print(item)