Python 列表理解与方程

问题描述

我需要把它变成一个列表理解。我被困了一段时间。有什么想法吗?

    LIST        p=16f1829   ;list directive to define processor
    #INCLUDE    <p16f1829.inc>  ;processor specific variable deFinitions

    __CONfig _CONfig1,(_FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FcmeN_OFF);
    __CONfig _CONfig2,(_WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _LVP_OFF);

;-------------------------------------------------------------------------

; UDATA_SHR declares a section of shared (all across the banks) uninitialised data
INT_VAR     UDATA_SHR   ; INT_VAR is the section name in ACCESS RAM
TempC       RES     1   ;
L0          RES     1   ;
w_temp      RES     1   ; variable used for context saving
pclath_temp     RES 1   ; variable used for context saving
status_temp RES     1   ; variable used for context saving

;-------------------------------------------------------------------------

LEDtrisA    EQU     TRISA
LEDtrisC    EQU     TRISC
LEDlatA     EQU     LATA
LEDlatC     EQU     LATC

;-------------------------------------------------------------------------

RESET_VECTOR    CODE    0x0000
        GOTO    START   ; When using debug header,ICD2 may not stop
                        ; on instruction 0 during reset.

;-------------------------------------------------------------------------

INT_VECTOR      CODE    0x0004  ; Interrupt vector location
    
ISR             ; Relocatable Interrupt Service Routine
;   Context saving for ISR
    MOVWF   w_temp      ; save off current W register contents
    MOVF    STATUS,w   ; move status register into W register
    MOVWF   status_temp ; save off contents of STATUS register
    MOVF    PCLATH,w   ; Saves value in register PCLATH
    MOVWF   pclath_temp

;-------------------------------------------------------------------------

;   If the interrupt came from the timer,execute the TMR0 interrupt 
;   service routine. 

    BANKSEL     TMR0
    MOVLW       .96
    MOVWF       TMR0
    BTFSC       INTCON,TMR0IF  
    CALL        Service_TMR0    
    BRA         Updatedisplay   ; Refresh the display

Updatedisplay
    BANKSEL     LATA        ; Selects memory bank containing LATA register 
    MOVF        LEDlatA,w  ; display status -> w register
    ANDLW       0x0f        ; Separate the lower half byte
    MOVWF       TempC       ; Save display status in TempC
    BSF         TempC,4    ; Beginning status of LSD display
    RRF         TempC,F    ; Set the status of the next display
    BTFSS       STATUS,C   ; C = 1?
    BCF         TempC,3    ; If not,turn off the LSD display
    BTFSC       TempC,0

    BRA         UpdateMsd   ; If it is turned on,display the MSD
                            ; digit of the number
UpdateLsd
    BCF         TempC,3    
    BSF         TempC,1                
    BTFSS       STATUS,Z   ; If it is,skip
    MOVF        L0,w       ; Third LSD digit -> w
    ANDLW       0x0f        ;   /
    BRA         displayOut  ; Show it on the display

UpdateMsd
    SWAPF   L0,w       ; MSD figure - >
    ANDLW   0x0f        ;   /
    BTFSC   STATUS,Z   ; MSD = 0?
    MOVLW   0x0a        ; If it is,skip

displayOut
    CALL    LedTable    ; Take the mask for a digit
    MOVWF   LEDlatC     ; Set the mask on port B
    MOVF    TempC,W    ; Turn on displays
    MOVWF   LEDlatA
    BRA ISR_END

LedTable
    ADDWF   PCL,F
    RETLW   B'00111111' ; mask for digit 0
    RETLW   B'00000110' ; mask for digit 1
    RETLW   B'01011011' ; mask for digit 2
    RETLW   B'01001111' ; mask for digit 3
    RETLW   B'01100110' ; mask for digit 4
    RETLW   B'01101101' ; mask for digit 5
    RETLW   B'01111101' ; mask for digit 6
    RETLW   B'00000111' ; mask for digit 7
    RETLW   B'01111111' ; mask for digit 8
    RETLW   B'01101111' ; mask for digit 9
    RETLW   B'00000000' ; no digit ......

;-------------------------------------------------------------------------

ISR_END
;   Restore contents before returning from interrupt    
    MOVF    pclath_temp,w   ; PCLATH is given its original content
    MOVWF   PCLATH
    MOVF    status_temp,w   ; STATUS is given its original content
    MOVWF   STATUS
    SWAPF   w_temp,f        ; W is given its original content
    SWAPF   w_temp,w

    BSF     INTCON,GIE  ; Global interrupt enabled
    RETFIE              ; Return from interrupt routine

;-------------------------------------------------------------------------

MAIN_PROG   CODE

START

;-------------------------------------------------------------------------

    ERRORLEVEL -302     ; disable warning accessing register not in bank 0
    BANKSEL OSCTUNE     ; Configure OPTION_REG and TMR0
    MOVLW   0x00        ; Set oscillator to factory calibrated frequency
    MOVWF   OSCTUNE     ;
    BANKSEL STATUS
    ERRORLEVEL +302     ; Enable warning accessing register not in bank 0

CLEAR_RAM                   ; code sequence initialises all GPR's to 0x00   
    MOVLW       0x70        ; initialise pointer
    MOVWF       FSR0        ; to RAM
    CLRF        FSR0H

NEXT
    CLRF        INDF0       ; Clear INDF0 register
    INCF        FSR0L,F    ; Inc pointer
    BTFSS       FSR0L,7    ; All done?
    GOTO        NEXT        ; No,clear NEXT

CONTINUE                    ; Yes,CONTINUE
    nop

;-------------------------------------------------------------------------
; MAIN BODY OF PROGRAM
;-------------------------------------------------------------------------

; Setup main init
        BANKSEL     OSCCON      ; Selects memory bank containing OSCCON register 
        MOVLW       b'01011000'     ; Set cpu clock speed of 500KHz -> correlates to (1/(500K/4)) for each instruction
        MOVWF       OSCCON          ; OSCCON <- 0x38

; Setup pins as digital I/O 
    BANKSEL     ANSELA      ; Selects memory bank containing ANSELA register 
    CLRF        ANSELA      ; All pins are digital
    CLRF        ANSELC

; Configure the input & output pins 
    BANKSEL     TRISA           ; Selects memory bank containing TRISA register 
    MOVLW       b'11111100'     ; RA0 and RA1 are configured as outputs and
                                ; used for 7-segment display multiplexing
                                ; RA2 is input push-button for initialization
    MOVWF       TRISA
    CLRF        LEDtrisC    ; Port C is output


    BANKSEL     LATA        ; Selects memory bank containing LATA register 
    CLRF        LEDlatA     ; Set all outputs to "0"
    CLRF        LEDlatC ;
    BSF         LEDlatA,1  ; Turn on MSD display 

; Setup Timer0 as the delay
    BANKSEL OPTION_REG
    MOVLW   b'10000100'     ; TMR0 is incremented each 32us (Fclk=8MHz)
    MOVWF   OPTION_REG  ; ps = 32

    BANKSEL     TMR0        ; Selects memory bank containing TMR0 register
    BSF         INTCON,GIE     ; Global interrupt enabled
    BSF         INTCON,TMR0IE  ; Timer TMR0 interrupt enabled

    MOVLW       0x79
    MOVWF       L0

MAINLOOP
    BRA         MAINLOOP    ; Continue forever

; TIMER 0 Interrupt routine clears the TMR0 interrupt flag.
Service_TMR0:
    BANKSEL     INTCON
    BCF         INTCON,TMR0IF  ; MUST ALWAYS clear this in software or else stuck in the ISR forever
    RETURN          

;-------------------------------------------------------------------------
; END OF PROGRAM
;-------------------------------------------------------------------------

    END         ; End of program   

解决方法

你可以这样做 -

[number*i for i in range(length+1)][1:]

这将迭代 range(length+1) 将每个乘以数字并存储在列表中。然后我只取除第 0 个元素之外的所有元素。

您可以从 1 开始迭代以避免首先生成第 0 个元素,正如@wwii 所建议的

[number*i for i in range(1,length+1)] #or simply range(length)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...