2012-04-16 15 views
6

में सूची सहेजें, मेरे पास तारों की एक सूची है।सूची में सभी वस्तुओं को संशोधित करने के लिए पाइथोनिक तरीका, और .txt फ़ाइल

theList = ['a', 'b', 'c'] 

मैं तार को पूर्णांकों को जोड़ने के लिए, इस तरह एक आउटपुट में जिसके परिणामस्वरूप हैं:

newList = ['a0', 'b0', 'c0', 'a1', 'b1', 'c1', 'a2', 'b2', 'c2', 'a3', 'b3', 'c3'] 

मैं इस प्रारूप में, एक .txt फ़ाइल को यह सहेजना चाहते:

a0 
b0 
c0 
a1 
b1 
c1 
a2 
b2 
c2 
a3 
b3 
c3 

प्रयास:

theList = ['a', 'b', 'c'] 
newList = [] 

for num in range(4): 
    stringNum = str(num) 
    for letter in theList: 
     newList.append(entry+stringNum) 

with open('myFile.txt', 'w') as f: 
    print>>f, newList 

अब ठीक है मैं ca n फ़ाइल MyFile.txt को बचाने लेकिन फाइल में लिखा होता है:

['a0', 'b0', 'c0', 'a1', 'b1', 'c1', 'a2', 'b2', 'c2', 'a3', 'b3', 'c3'] 

अधिक pythonic तरीके मेरा लक्ष्य कर रहे हैं बहुत स्वागत प्राप्त करने के लिए पर कोई सुझाव,

+0

उत्तरदाताओं, ध्यान दें कि ओपी ने "अधिक पायथनिक" समाधान के लिए कहा है, कम या अधिक जटिल नहीं। –

उत्तर

7
अपने अंतिम पंक्ति, उपयोग करने के बजाय

:

f.write("\n".join(newList)) 

यह नई सूची में स्ट्रिंग्स को लिख देगा, जो न्यूलाइन द्वारा अलग किया जाएगा, f। ध्यान दें कि यदि आप वास्तव में नहीं है newList जरूरत है, तो आप अपने दो छोरों गठबंधन और तार लिख सकते हैं के रूप में तुम जाओ: आप सेक चाहते हैं

the_list = ['a', 'b', 'c'] 

with open('myFile.txt', 'w') as f: 
    for num in range(4): 
     for letter in the_list: 
      f.write("%s%s\n" % (letter, num)) 
+0

अच्छा .. और सामान्य रूप से 'रेंज' पर' xrange' का पक्ष लें (हालांकि ऐसी छोटी संख्याओं के साथ यह वास्तव में कोई फर्क नहीं पड़ता) – Levon

+3

इस साइट पर उत्तरों में 'श्रेणी' का उपयोग करना बेहतर है क्योंकि यह पायथन 3 के साथ संगत है। – jamylak

+0

@jamylak क्या आप बता सकते हैं कि मैं अभी भी 2.6/7 के साथ कोड .. इसे इंगित करने के लिए धन्यवाद। – Levon

2

यह शायद अपनी नौकरी

with open('myFile.txt', 'w') as f: 
    for row in itertools.product(range(len(theList)+1),theList): 
     f.write("{1}{0}\n".format(*row)) 
+0

यह सही आउटपुट प्रिंट नहीं करता है। – jamylak

+0

@jamylak: इसे इंगित करने के लिए धन्यवाद। मैंने इसे – Abhijit

+0

को सही किया है, धन्यवाद, मैं itertools – Marchy

2

करना होगा अपने कोड एक छोटा सा आप कर सकते हैं:

>>> n = 4 
>>> the_list = ['a', 'b', 'c'] 
>>> new_list = [x+str(y) for x in the_list for y in range(n)] 
>>> with open('myFile.txt', 'w') as f: 
...  f.write("\n".join(new_list)) 
+0

से अपरिचित हूं, मुझे लगता है कि यह वास्तव में ओपी के समाधान से कम * पायथनिक है: 1) यह 'मानचित्र' और 'लैम्ब्डा' का उपयोग करता है, जो पाइथन सूची सूची के रूप में नहीं हैं या सीधे 'list.append', 2) नक्शा + लैम्ब्डा + इटर्टोल्स अधिक जटिल और संभवतः केवल केआईएसएस समाधान से धीमा है, जिससे इसे पायथन-आइश का कम जेन बना दिया जाता है, 3) यह 'with' कथन का उपयोग नहीं करता है, इसलिए फ़ाइल बंद नहीं हो सकती है (हालांकि यह सीपीथन में है), 4) gzip का उपयोग करके अपने कोड को संपीड़ित करना बेहतर है। :-) –

+0

मुझे नहीं लगता कि यह बहुत पठनीय (सरल जटिल से बेहतर है) हालांकि कुछ स्तर पर इस छोटे कोड में यह सब निचोड़ने के लिए बहुत अच्छा है। – Levon

+0

मुझे पता है, क्योंकि मैंने सीखने के लिए कहा है कि मेरा कोड उलझन में है और उलझन में है। Urgh। – luke14free

1

क्या आप कर रहे हैं ठीक है - Zen of Python में बिंदुओं में से एक "सरल जटिल से बेहतर है" है। आप आसानी से इसे एक लाइनर के रूप में पुनः लिख सकते हैं (संभवतः एक नेस्टेड सूची समझ का उपयोग कर), लेकिन आपके पास जो कुछ है वह समझने में आसान और आसान है।

लेकिन कुछ मामूली मैं कर सकता है परिवर्तन होते हैं:

  • अक्सर यह JSON की तरह अपने पाठ फ़ाइल में एक अधिक पोर्टेबल क्रमबद्धता उपयोग करने के लिए, बेहतर है, पायथन के json.dump(newList, f) के माध्यम से। हालांकि, with कथन का उपयोग करने के लिए अच्छा है। आपका प्रश्न शीर्षक कहते हैं, "एक में सभी आइटम को संशोधित:, str(num) संलग्न अंदर उतना ही अच्छा
  • PEP-8 नामकरण सम्मेलनों का पालन करें तो new_listnewList
  • nitpicking के बजाय -
  • आप एक अलग stringNum चर जरूरत नहीं सूची ", जब वास्तव में आपका कोड एक नई सूची बना रहा है। आम तौर पर यह करने के लिए पाइथोनिक चीज है - जगह में सूची को संशोधित करने जैसे दुष्प्रभाव अक्सर कम उपयोगी होते हैं।
+0

जेएसओएन को देखा और पीईपी -8 सम्मेलनों के माध्यम से पढ़ना। परिशिष्ट के अंदर- धन्यवाद (काफी स्पष्ट अब मैं इसे देखता हूं: डी) आप सही हैं, मैंने सूची को संशोधित करने का इरादा निर्धारित किया है, लेकिन मेरे कोड में मैंने एक नया बनाया है। यह भी एक बेहतर विचार की तरह प्रतीत होता है। धन्यवाद – Marchy

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

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