सूची में समूह की बढ़ती संख्या [डुप्लिकेट]
मैं एक सूची में लगातार बढ़ते पूर्णांक को एक साथ कैसे जोड़ सकता हूं? उदाहरण के लिए, मेरे पास पूर्णांकों की निम्नलिखित सूची है:
numbers = [0, 5, 8, 3, 4, 6, 1]
मैं तत्वों को एक साथ समूह में रखना चाहूंगा:
[[0, 5, 8], [3, 4, 6], [1]]
जबकि अगला पूर्णांक पिछले से अधिक है, उसी नेस्टेड सूची में जोड़ते रहें; अगला पूर्णांक छोटा है, नेस्टेड सूची को मुख्य सूची में जोड़ें और फिर से शुरू करें।
मैंने कुछ अलग तरीकों की कोशिश की है (जबकि लूप, लूप, एन्युमरेट और रेंज के लिए), लेकिन यह पता नहीं लगा सकता कि कैसे इसे एक ही नेस्टेड सूची में जोड़ा जाए, जब तक कि अगला पूर्णांक बड़ा न हो।
result = []
while (len(numbers) - 1) != 0:
group = []
first = numbers.pop(0)
second = numbers[0]
while first < second:
group.append(first)
if first > second:
result.append(group)
break
जवाब
आप लूप के लिए उपयोग कर सकते हैं:
numbers = [0, 5, 8, 3, 4, 6, 1]
result = [[]]
last_num = numbers[0] # last number (to check if the next number is greater or equal)
for number in numbers:
if number < last_num:
result.append([]) # add a new consecutive list
result[-1].append(number)
last_num = number # set last_num to this number, so it can be used later
print(result)
नोट: यह उपयोग नहीं करता है .pop()
, इसलिए numbers
सूची बरकरार है। इसके अलावा, एक लूप = ओ (एन) समय जटिलता !!
यदि पंडों को अनुमति दी जाती है, तो मैं यह करूंगा:
import pandas as pd
numbers = [0, 5, 8, 3, 4, 6, 1]
df = pd.DataFrame({'n':numbers})
[ g['n'].values.tolist() for _,g in df.groupby((df['n'].diff()<0).cumsum())]
का उत्पादन
[[0, 5, 8], [3, 4, 6], [1]]
तुम यह केर सकते हो:
numbers = [0, 5, 8, 3, 4, 6, 1]
result = []
while len(numbers) != 0:
secondresult = []
for _ in range(3):
if numbers != []:
toappend = numbers.pop(0)
secondresult.append(toappend)
else:
continue
result.append(secondresult)
print(result)
और छोरों के लिए उपयोग करें। और उन्हें दूसरे स्तर पर परिणाम और परिणाम के लिए संलग्न करें