2013-08-11 8 views
23

मेरे पास यह प्रोग्राम है जो किसी विशिष्ट प्रश्न का उत्तर देने के लिए किए गए समय की गणना करता है, और उत्तर गलत होने पर थोड़ी देर के लूप से बाहर निकलता है, लेकिन मैं अंतिम गणना को हटाना चाहता हूं, इसलिए मैं min() पर कॉल कर सकता हूं और यह गलत समय नहीं है क्षमा करें अगर यह भ्रमित है।पायथन | सूची में अंतिम आइटम को कैसे हटाएं?

from time import time 

q = input('What do you want to type? ') 
a = ' ' 
record = [] 
while a != '': 
    start = time() 
    a = input('Type: ') 
    end = time() 
    v = end-start 
    record.append(v) 
    if a == q: 
     print('Time taken to type name: {:.2f}'.format(v)) 
    else: 
     break 
for i in record: 
    print('{:.2f} seconds.'.format(i)) 

उत्तर

38

अगर मैं सवाल का सही ढंग से समझ, आप पिछले आइटम के अलावा सब कुछ रखने के लिए टुकड़ा करने की क्रिया संकेतन का उपयोग कर सकते हैं पायथन मुहावरे।

आप कोड दिखाई देगा: http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html

+1

बहुत बढ़िया लिंक, मैं इसे अपनी पिछली जेब में रखूंगा। – SethMMorton

3

आप की जरूरत है:

record = record[:-1] 
for पाश से पहले

यह record वर्तमान record सूची पर सेट करेगा लेकिन बिना अंतिम आइटम के बिना सेट करेगा। आप अपनी आवश्यकताओं के आधार पर, यह सुनिश्चित करना चाहते हैं कि यह करने से पहले सूची खाली नहीं है।

कोड कुछ इस्तेमाल कर सकते हैं -:

रिकॉर्ड = रिकॉर्ड [: 1]

+0

मैं देखता हूं, धन्यवाद! – Samir

+2

क्या आप 'record.pop()' का उपयोग भी कर सकते हैं? (एनबी: मैं अजगर के लिए बहुत नया हूं) – CodeBeard

+1

हां, आप record.pop() का भी उपयोग कर सकते हैं। Http://docs.python.org/3.3/tutorial/datastructures.html – Bastiano9

2

आप समय के साथ बहुत कुछ कर रहे हैं, तो मैं इस छोटे (20 लाइन) संदर्भ प्रबंधक सिफारिश कर सकते हैं: मैं अत्यधिक इस पढ़ने की सलाह तो यह:

#!/usr/bin/env python 
# coding: utf-8 

from timer import Timer 

if __name__ == '__main__': 
    a, record = None, [] 
    while not a == '': 
     with Timer() as t: # everything in the block will be timed 
      a = input('Type: ') 
     record.append(t.elapsed_s) 
    # drop the last item (makes a copy of the list): 
    record = record[:-1] 
    # or just delete it: 
    # del record[-1] 

बस संदर्भ के लिए, यहाँ पूर्ण में Timer संदर्भ प्रबंधक की सामग्री है:

from timeit import default_timer 

class Timer(object): 
    """ A timer as a context manager. """ 

    def __init__(self): 
     self.timer = default_timer 
     # measures wall clock time, not CPU time! 
     # On Unix systems, it corresponds to time.time 
     # On Windows systems, it corresponds to time.clock 

    def __enter__(self): 
     self.start = self.timer() # measure start time 
     return self 

    def __exit__(self, exc_type, exc_value, exc_traceback): 
     self.end = self.timer() # measure end time 
     self.elapsed_s = self.end - self.start # elapsed time, in seconds 
     self.elapsed_ms = self.elapsed_s * 1000 # elapsed time, in milliseconds 
+0

वास्तव में यह पहला 'समय' कार्यक्रम है जिसे मैंने लिखा है, लेकिन जब मैं मॉड्यूल से थोड़ा अधिक परिचित हो जाता हूं, तो मैं इसमें एक नज़र डालता हूं, धन्यवाद! – Samir

55

आप

record = record[:-1] 

के साथ इस

del record[-1] 

समस्या का उपयोग करना चाहिए कि यह एक बनाता है जब भी आप कोई आइटम हटाते हैं, तो सूची की प्रति, इसलिए बहुत कुशल नहीं है

+1

स्वीकार्य उत्तर से यह एक बेहतर समाधान है। –

18

list.pop() सूची के अंतिम तत्व को हटा देता है और देता है।

संबंधित मुद्दे