Python列表 - 作为列表索引的字符串格式

时间:2016-09-05 11:12:30

标签: python list

根据条件,我需要从一个或另一个函数获取值。我试图把它放在一个简单的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个元素并处理它们。如果conditionTrue,则会调用一个函数或另一个函数(如果为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'和'%行'。我之前使用过简化而不是分散实际问题,但我认为这是必要的。如果不是一个好的决定,我很抱歉。

5 个答案:

答案 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_listmy_other_list。然后使用整数索引访问所选列表的第3个元素。如果您需要访问列表中的其他元素,此方法的优点是source仍然绑定到列表。

另一种类似于你的方式是直接获取元素:

index = 2
if condition:
    item = my_list[index]
else:
    item = my_other_list[index]
print(item)