एक टुपल में मान को एक्सेस करना जो एक सूची में है


88
[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]

मैं इस सूची के अंदर प्रत्येक टपल से दूसरा मान कैसे लौटाऊं?

वांछित उत्पादन:

[2, 3, 5, 4, 7, 7, 8]

जवाबों:


100

एक सूची समझ के साथ

[x[1] for x in L]

52
मैं समझता हूं कि यह एक सरल प्रश्न है। क्या एसओ ऐसा अभिजात्य स्थान है? प्रश्न को देखने का प्रयास करें, परिणाम वही नहीं हैं जो मुझे चाहिए। मैंने अजगर को कठिन तरीके से सीखा और मुझे यह वहां नहीं मिला। मैंने पायथन सीखने के सर्वोत्तम दृष्टिकोण के बारे में प्रश्न पूछे हैं और सर्वसम्मत उत्तर है कि एक मूल पुस्तक प्राप्त करें और इसमें गोता लगाएँ। यह मुझे निराश करता है और साथ ही मैं किसी भी पुस्तक या ऑनलाइन सामग्री का हल नहीं ढूँढ सकता हूँ जो मुझे मिली है। अब तक के लिए? साथ ही आपकी टिप्पणी वास्तव में सहायक नहीं है और नए सदस्यों को एसओ पर पोस्ट करने से हतोत्साहित करती है।
सुपर

1
@ नई: मैं पायथन ट्यूटोरियल पढ़ने का सुझाव देता हूं: docs.python.org/tutorial/index.html । सामान्य तौर पर, प्रलेखन बहुत अच्छा है। और कभी-कभी, बस एक कोशिश करनी होगी;)
फेलिक्स क्लिंग

19
मैंने टॉगल सूची में किसी आइटम तक पहुंचने के इरादे से "टुपल में एक्सेस करने वाली वस्तु" को गॉगल किया। इसने मुझे आपके प्रश्न के लिए लाया, इसलिए धन्यवाद। मैं पायथन के लिए काफी नया हूँ और विशेष रूप से सहज जवाब नहीं मिल रहा है, लेकिन यह सिर्फ मुझे है!
पैट्रिक विलियम्स

7
मुझे लगा कि एसओ के साथ पूरी अवधारणा को आपके सवालों के जवाब ढूंढना आसान बनाना था। वैध होने के लिए एक प्रश्न एक निश्चित कठिनाई का क्यों होना चाहिए? अच्छा सवाल, अच्छा जवाब।
स्केलुसवे

3
प्रतिभाशाली! एक संक्षिप्त, तीक्ष्ण, टू टू द आंसर टू शॉर्ट, शार्प टू द प्वाइंट प्रश्न। तुम दोनों ने बस मेरा दिन बना दिया!
एरिक एम

82

इग्नासियो का जवाब है कि आप क्या चाहते हैं। हालांकि, जैसा कि कोई पायथन भी सीख रहा है, मुझे इसे आपके लिए विच्छेदित करने का प्रयास करें ... जैसा कि उल्लेख किया गया है, यह एक सूची समझ है ( उदाहरण के लिए, DiveIntoPython3 में शामिल है )। यहाँ कुछ बिंदु दिए गए हैं:

[x[1] for x in L]

  • []कोड की लाइन के चारों ओर ध्यान दें । ये एक सूची को परिभाषित करते हैं। यह आपको बताता है कि यह कोड एक सूची देता है, इसलिए यह listप्रकार का है। इसलिए, इस तकनीक को "सूची समझ" कहा जाता है।
  • L आपकी मूल सूची है। इसलिए आपको L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]उपरोक्त कोड को निष्पादित करने से पहले परिभाषित करना चाहिए ।
  • xएक चर है जो केवल समझ में मौजूद है - उपरोक्त रेखा को निष्पादित करने के बाद xसमझ से बाहर पहुंचने का प्रयास करें या टाइप करें type(x)और यह आपको बताएगा NameError: name 'x' is not defined, जबकि type(L)रिटर्न <class 'list'>
  • x[1]को अंक दूसरा tuples में से प्रत्येक में आइटम जबकि x[0]पहले वस्तुओं में से प्रत्येक को इंगित करेंगे।
  • तो कोड की यह पंक्ति सचमुच पढ़ती है "सूची L में सभी tuples के लिए एक टपल में दूसरा आइटम लौटाएं।"

यह बताना कठिन है कि आपने प्रश्न पूछने से पहले समस्या का कितना प्रयास किया, लेकिन शायद आप सिर्फ समझ से परिचित नहीं थे? मैं DiveIntoPython के अध्याय 3 , या समझ पर किसी भी संसाधन के माध्यम से पढ़ने में कुछ समय बिताऊंगा । सौभाग्य।


4
2.x में, xLC के बाहर मौजूद होगा, जिसके अंतिम मान को बाध्य किया जाएगा। यह 3.x में तय किया गया है।
इग्नासियो वाज़केज़-अब्राम्स

मुझे इसका एहसास नहीं था। जानकारी के लिए धन्यवाद।
गैरी

4
बहुत बढ़िया स्पष्टीकरण @gary। मैं विशेष रूप से आपकी ओर इशारा करता हूं कि एल क्या दर्शाता है।
पैट्रिक विलियम्स

प्रतिक्रिया के लिए धन्यवाद @PatrickWilliams। मुझे खुशी है कि इससे मदद मिली। आप भी कर सकते हैं [x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]लेकिन यह आंखों पर उतना आसान नहीं है।
गैरी

5

एक सूची समझ पूरी तरह से ऐसा करने का तरीका है। दूसरा तरीका जो तेज होना चाहिए वह है mapऔर itemgetter

import operator

new_list = map(operator.itemgetter(1), old_list)

टिप्पणी के जवाब में कि ओपी को Google पर कोई जवाब नहीं मिला, मैं इसे करने के लिए एक सुपर भोला तरीका बताऊंगा।

new_list = []
for item in old_list:
    new_list.append(item[1])

यह उपयोग करता है:

  1. रिक्त सूची को संदर्भित करने के लिए एक चर की घोषणा।
  2. A लूप के लिए।
  3. appendकिसी सूची पर विधि को कॉल करना ।

यदि कोई व्यक्ति किसी भाषा को सीखने की कोशिश कर रहा है और इन मूल टुकड़ों को अपने लिए नहीं रख सकता है, तो उन्हें इसे एक अभ्यास के रूप में देखने की आवश्यकता है और इसे स्वयं भी करना चाहिए, भले ही इसमें बीस घंटे लगें।

किसी को यह सीखने की ज़रूरत है कि कोई क्या चाहता है और उपलब्ध साधनों की तुलना कैसे करें । मेरे दूसरे उत्तर के प्रत्येक तत्व को एक बुनियादी ट्यूटोरियल में शामिल किया जाना चाहिए। आप एक को पढ़े बिना प्रोग्राम करना नहीं सीख सकते


2

या आप उपयोग कर सकते हैं pandas:

>>> import pandas as pd
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> df=pd.DataFrame(L)
>>> df[1]
0    2
1    3
2    5
3    4
4    7
5    7
6    8
Name: 1, dtype: int64
>>> df[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>> 

या numpy:

>>> import numpy as np
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> arr=np.array(L)
>>> arr.T[1]
array([2, 3, 5, 4, 7, 7, 8])
>>> arr.T[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>> 

1

आप इसके साथ अनुक्रम अनपैकिंग का भी उपयोग कर सकते हैं zip:

L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]

_, res = zip(*L)

print(res)

# (2, 3, 5, 4, 7, 7, 8)

यह भी _खारिज कर दिया पहले तत्वों से एक ट्यूपल बनाता है । केवल दूसरा निकालना संभव है, लेकिन अधिक क्रिया:

from itertools import islice

res = next(islice(zip(*L), 1, None))

0
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))

1
कृपया अपने उत्तर को थोड़ा स्पष्ट करें ताकि दूसरों के लिए इसे समझना आसान हो जाए।
हर्बिशॉफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.