跳过并从lis中获取元素

2024-09-26 18:15:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我在从列表中提取元素时遇到问题。当我按下键盘上的向下翻页按钮时,它将调用向下翻页功能,因为它将跳过7个元素,并从列表中提取下一个元素,即:

['108 Sky Atlantic', '401 Sky Sports 1 UK', '402 SKY Sports 2 UK', '403 Sky Sports 3 UK', '404 Sky Sports 4 UK', '405 Sky Sports 5 UK', '406 Sky Sports News HQ']

当我点击键盘上的向下箭头按钮时,它将跳过7个元素,但它不会获取在406 Sky Sports News HQ之后的7个元素,因为它将获取在413 Eurosport 1 UK之后的元素,因此channels_list将显示如下错误:

['414 Eurosport 2 UK', '415 BT Sport 1', '416 BT Sport 2',
 '417 At the Races', '418 BT Sport ESPN', '419 MUTV', '420 Chelsea TV']

应该是:

['407 Sky Sports F1', '408 Sky Sports 1 HD', '409 Sky Sports 2 HD', '410 Sky Sports 3 HD', '411 Sky Sports 4 HD', '412 Sky Sports 5 HD', '413 Eurosport 1 UK']

代码如下:

def PageDown(self):
    self.channel = [
        '101 BBC One S East', '102 BBC Two', '103 ITV', '104 Channel 4', 
        '105 Channel 5', '106 Sky One', '107 Sky Living', '108 Sky Atlantic', 
        '401 Sky Sports 1 UK', '402 SKY Sports 2 UK', '403 Sky Sports 3 UK', 
        '404 Sky Sports 4 UK', '405 Sky Sports 5 UK', '406 Sky Sports News HQ', 
        '407 Sky Sports F1', '408 Sky Sports 1 HD', '409 Sky Sports 2 HD', 
        '410 Sky Sports 3 HD', '411 Sky Sports 4 HD', '412 Sky Sports 5 HD', 
        '413 Eurosport 1 UK', '414 Eurosport 2 UK', '415 BT Sport 1', 
        '416 BT Sport 2', '417 At the Races', '418 BT Sport ESPN', '419 MUTV', 
        '420 Chelsea TV', '421 Eir Sport 1', '422 Eir Sport 2']

    channels_list = list()
    channels_Index += 7

    for i, start_ch in enumerate(self.channel):
        if start_ch == channel:
            channels_list = 
                self.channel[i+self.channels_Index:i+self.channels_Index+7]

我希望实现的是,我想跳过7个元素,并在每次按下键盘的向下翻页按钮时提取7个元素。你知道吗

例如:

当我点击page down(向下翻页)按钮时,我想跳过这7个元素并获取下面的7个元素,如下所示: ['108 Sky Atlantic'、'401 Sky Sports 1 UK'、'402 Sky Sports 2 UK'、'403 Sky Sports 3 UK'、'404 Sky Sports 4 UK'、'405 Sky Sports 5 UK'、'406 Sky Sports News HQ']

因此,当我点击page down按钮时,我想得到接下来的7个元素:

['407 Sky Sports F1', '408 Sky Sports 1 HD', '409 Sky Sports 2 HD', '410 Sky Sports 3 HD', '411 Sky Sports 4 HD', '412 Sky Sports 5 HD', '413 Eurosport 1 UK']

当我再次点击page down按钮时,我想获取接下来的7个元素:

['414 Eurosport 2 UK', '415 BT Sport 1', '416 BT Sport 2', '417 At the Races', '418 BT Sport ESPN', '419 MUTV', '420 Chelsea TV']

当我最后再次点击page down(向下翻页)按钮时,我想获取接近列表末尾的7个元素,使其显示如下:

['416 BT Sport 2', '417 At the Races', '418 BT Sport ESPN', '419 MUTV', '420 Chelsea TV', '421 Eir Sport 1', '422 Eir Sport 2']

你能给我举个例子吗?我每次按键盘的向下键时,如何跳过7个元素,从列表中提取7个元素?你知道吗


Tags: self元素列表键盘按钮newsbtchannels
3条回答

这演示了一次滚动7个通道,关键部分是next_seven_channels = self.all_channels[self.channel_index:end_index]

try:
    import Tkinter as tk
except:
    import tkinter as tk

class app(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.all_channels =  [
        '101 BBC One S East', '102 BBC Two', '103 ITV', '104 Channel 4', 
        '105 Channel 5', '106 Sky One', '107 Sky Living', '108 Sky Atlantic', 
        '401 Sky Sports 1 UK', '402 SKY Sports 2 UK', '403 Sky Sports 3 UK', 
        '404 Sky Sports 4 UK', '405 Sky Sports 5 UK', '406 Sky Sports News HQ', 
        '407 Sky Sports F1', '408 Sky Sports 1 HD', '409 Sky Sports 2 HD', 
        '410 Sky Sports 3 HD', '411 Sky Sports 4 HD', '412 Sky Sports 5 HD', 
        '413 Eurosport 1 UK', '414 Eurosport 2 UK', '415 BT Sport 1', 
        '416 BT Sport 2', '417 At the Races', '418 BT Sport ESPN', '419 MUTV', 
        '420 Chelsea TV', '421 Eir Sport 1', '422 Eir Sport 2']
        self.channel_index = 0

        self.print_channels = tk.Button(self,text="Page Down",
                                        font=("Calibri",30,"bold"),
                                        foreground="DodgerBlue2",
                                        command=self.PageDown)
        self.print_channels.pack()

    def PageDown(self,event=None):
        end_index = self.channel_index + 7
        if end_index > len(self.all_channels):
            end_index -= len(self.all_channels) - end_index   
        next_seven_channels = self.all_channels[self.channel_index:end_index]
        self.channel_index += 7
        if self.channel_index > len(self.all_channels):
            self.channel_index = 0
        print (next_seven_channels)

root = app()
root.mainloop()

如果我理解正确,要立即显示前7个通道,只需在程序启动后调用self.PageDown(),如下所示:

try:
    import Tkinter as tk
except:
    import tkinter as tk

class app(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.all_channels =  [
        '101 BBC One S East', '102 BBC Two', '103 ITV', '104 Channel 4', 
        '105 Channel 5', '106 Sky One', '107 Sky Living', '108 Sky Atlantic', 
        '401 Sky Sports 1 UK', '402 SKY Sports 2 UK', '403 Sky Sports 3 UK', 
        '404 Sky Sports 4 UK', '405 Sky Sports 5 UK', '406 Sky Sports News HQ', 
        '407 Sky Sports F1', '408 Sky Sports 1 HD', '409 Sky Sports 2 HD', 
        '410 Sky Sports 3 HD', '411 Sky Sports 4 HD', '412 Sky Sports 5 HD', 
        '413 Eurosport 1 UK', '414 Eurosport 2 UK', '415 BT Sport 1', 
        '416 BT Sport 2', '417 At the Races', '418 BT Sport ESPN', '419 MUTV', 
        '420 Chelsea TV', '421 Eir Sport 1', '422 Eir Sport 2']
        self.channel_index = 0

        self.print_channels = tk.Button(self,text="Page Down",
                                        font=("Calibri",30,"bold"),
                                        foreground="DodgerBlue2",
                                        command=self.PageDown)
        self.print_channels.pack()
        self.PageDown() # added code <  

    def PageDown(self,event=None):
        end_index = self.channel_index + 7
        if end_index > len(self.all_channels):
            end_index -= len(self.all_channels) - end_index   
        next_seven_channels = self.all_channels[self.channel_index:end_index]
        self.channel_index += 7
        if self.channel_index > len(self.all_channels):
            self.channel_index = 0
        print (next_seven_channels)

root = app()
root.mainloop()

或在程序启动时跳过显示前7个频道:

try:
    import Tkinter as tk
except:
    import tkinter as tk

class app(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.all_channels =  [
        '101 BBC One S East', '102 BBC Two', '103 ITV', '104 Channel 4', 
        '105 Channel 5', '106 Sky One', '107 Sky Living', '108 Sky Atlantic', 
        '401 Sky Sports 1 UK', '402 SKY Sports 2 UK', '403 Sky Sports 3 UK', 
        '404 Sky Sports 4 UK', '405 Sky Sports 5 UK', '406 Sky Sports News HQ', 
        '407 Sky Sports F1', '408 Sky Sports 1 HD', '409 Sky Sports 2 HD', 
        '410 Sky Sports 3 HD', '411 Sky Sports 4 HD', '412 Sky Sports 5 HD', 
        '413 Eurosport 1 UK', '414 Eurosport 2 UK', '415 BT Sport 1', 
        '416 BT Sport 2', '417 At the Races', '418 BT Sport ESPN', '419 MUTV', 
        '420 Chelsea TV', '421 Eir Sport 1', '422 Eir Sport 2']
        self.channel_index = 7 # changed code <  

        self.print_channels = tk.Button(self,text="Page Down",
                                        font=("Calibri",30,"bold"),
                                        foreground="DodgerBlue2",
                                        command=self.PageDown)
        self.print_channels.pack()

    def PageDown(self,event=None):
        end_index = self.channel_index + 7
        if end_index > len(self.all_channels):
            end_index -= len(self.all_channels) - end_index   
        next_seven_channels = self.all_channels[self.channel_index:end_index]
        self.channel_index += 7
        if self.channel_index > len(self.all_channels):
            self.channel_index = 0
        print (next_seven_channels)

root = app()
root.mainloop()

更改channels_Index的值,这是一个全局变量,您没有在代码中发布它(我假设;否则python将抛出NameError),但是您读取了self.channels_Index的值。你的意思可能是self.channels_Index += 7

移动线路

channels_Index += 7

现在应该可以了。将它放在循环之后,以便可以再次调用它。你知道吗

相关问题 更多 >

    热门问题