जवाबों:
हममम। यहाँ एक सूची समझ के साथ एक उत्तर था, लेकिन यह गायब हो गया है।
यहाँ:
[i for i,x in enumerate(testlist) if x == 1]
उदाहरण:
>>> testlist
[1, 2, 3, 5, 3, 1, 2, 1, 6]
>>> [i for i,x in enumerate(testlist) if x == 1]
[0, 5, 7]
अपडेट करें:
ठीक है, आप एक जनरेटर अभिव्यक्ति चाहते हैं, हमारे पास एक जनरेटर अभिव्यक्ति होगी। यहाँ सूची फिर से समझ में है, एक लूप में:
>>> for i in [i for i,x in enumerate(testlist) if x == 1]:
... print i
...
0
5
7
अब हम एक जनरेटर का निर्माण करेंगे ...
>>> (i for i,x in enumerate(testlist) if x == 1)
<generator object at 0x6b508>
>>> for i in (i for i,x in enumerate(testlist) if x == 1):
... print i
...
0
5
7
और पर्याप्त रूप से, हम इसे एक चर में निर्दिष्ट कर सकते हैं, और वहां से इसका उपयोग कर सकते हैं ...
>>> gen = (i for i,x in enumerate(testlist) if x == 1)
>>> for i in gen: print i
...
0
5
7
और सोचने के लिए मैं फोरट्रान लिखता था।
args = ['x', '-p1', 'v1', '-p2', 'v2']
:। फिर कमांड args[[i for i, x in enumerate(args) if x == '-p1'][0] + 1]
वापस आती है'v1'
निम्नलिखित के बारे में क्या?
print testlist.index(element)
यदि आप सुनिश्चित नहीं हैं कि क्या वास्तव में देखने के लिए तत्व सूची में है, तो आप एक प्रारंभिक जांच जोड़ सकते हैं, जैसे
if element in testlist:
print testlist.index(element)
या
print(testlist.index(element) if element in testlist else None)
या "पायथोनिक तरीका", जो मुझे इतना पसंद नहीं है क्योंकि कोड कम स्पष्ट है, लेकिन कभी-कभी अधिक कुशल होता है,
try:
print testlist.index(element)
except ValueError:
pass
ValueError
for i in xrange(len(testlist)):
if testlist[i] == 1:
print i
अनुरोध के अनुसार सीमा के बजाय व्यवस्थित करें (टिप्पणियां देखें)।
xrange
पायथन 3.x में अपदस्थ है, क्योंकि नया range
पुराना हैxrange
[x for x in range(len(testlist)) if testlist[x]==1]
नीचे आज़माएं:
testlist = [1,2,3,5,3,1,2,1,6]
position=0
for i in testlist:
if i == 1:
print(position)
position=position+1
यदि आपकी सूची काफी बड़ी हो गई है और आपको केवल सूचकांकों की एक बड़ी संख्या में मूल्य मिलने की उम्मीद है, तो विचार करें कि यह कोड बहुत तेजी से निष्पादित कर सकता है क्योंकि आपको सूची में प्रत्येक मूल्य को पुनरावृत्त करना नहीं है।
lookingFor = 1
i = 0
index = 0
try:
while i < len(testlist):
index = testlist.index(lookingFor,i)
i = index + 1
print index
except ValueError: #testlist.index() cannot find lookingFor
pass
यदि आप मूल्य को बहुत अधिक पाने की उम्मीद करते हैं, तो आपको संभवतः एक सूची में "सूचकांक" जोड़ना चाहिए और प्रति पुनरावृत्ति का समय बचाने के लिए सूची को अंत में प्रिंट करना चाहिए।
मुझे लगता है कि thte Tkinter लाइब्रेरी से कर्सलिज़ेशन () विधि का उपयोग करना उपयोगी हो सकता है:
from Tkinter import *
listbox.curselection()
यह विधि टिंकर सूची बॉक्स विजेट पर काम करती है, इसलिए आपको सूची के बजाय उनमें से एक का निर्माण करना होगा।
यह इस तरह एक स्थिति लौटेगा:
('0'), (हालांकि बाद में टिंकेटर के संस्करण इसके बजाय एक किलों की सूची लौटा सकते हैं)
जो पहली स्थिति के लिए है और आइटम स्थिति के अनुसार संख्या बदल जाएगी।
अधिक जानकारी के लिए, यह पृष्ठ देखें: http://effbot.org/tkinterbook/listbox.htm
अभिवादन।
जिस के साथ पूरा उदाहरण बताना input_list
है searies1
(उदाहरण: input_list [0]) जिसमें आप एक लुकअप करना चाहते हैंseries2
(उदाहरण: input_list [1]) और अगर यह SERIES1 में मौजूद है SERIES2 के अनुक्रमित मिलता है।
नोट: certain condition
यदि स्थिति सरल है तो आप लंबोदर अभिव्यक्ति में जाएंगे
input_list = [[1,2,3,4,5,6,7],[1,3,7]]
series1 = input_list[0]
series2 = input_list[1]
idx_list = list(map(lambda item: series1.index(item) if item in series1 else None, series2))
print(idx_list)
उत्पादन:
[0, 2, 6]
testlist = [1,2,3,5,3,1,2,1,6]
for id, value in enumerate(testlist):
if id == 1:
print testlist[id]
मुझे लगता है कि यह स्पष्ट रूप से आप क्या चाहते हैं। ;-) 'आईडी' हमेशा सूची में मूल्यों का सूचकांक होगा।