मान लीजिए मेरे पास है:

x = [[0, 1], [0, 1], [0, 2], [0, 2], [0, 3]]

और मैं इस तरह कुछ आउटपुट करना चाहता हूं:

count = [0, 1] = 2, [0, 2] = 2, [0, 3] = 1

मैं कैसे गिन सकता हूं कि कितने सरणी हुई?

2
nvmnd 21 मई 2018, 06:01
सुन्न कहाँ है?
 – 
Mad Physicist
21 मई 2018, 06:09
आपने अब तक क्या प्रयास या शोध किया है?
 – 
Mad Physicist
21 मई 2018, 06:10

5 जवाब

काउंटर वर्ग का उपयोग करें जैसे:

कोड:

Counter(tuple(i) for i in x)

ध्यान दें कि चूंकि Counter एक dict है, इसलिए चाबियों को धोने योग्य होना चाहिए। यही कारण है कि tuple(i) for i in x की आवश्यकता है, क्योंकि यह सूचियों को x में टुपल्स में बदल देगा ताकि उन्हें Counter के लिए चाबियों के रूप में उपयोग किया जा सके।

टेस्ट कोड:

x = [[0, 1], [0, 1], [0, 2], [0, 2], [0, 3]]

from collections import Counter
print(Counter(tuple(i) for i in x))

परिणाम:

Counter({(0, 1): 2, (0, 2): 2, (0, 3): 1})
4
Stephen Rauch 21 मई 2018, 06:18
1
आप शायद यह बताना चाहें कि Counter के dict होने का मतलब है कि आप Counter(x) नहीं कर सकते। +1 परवाह किए बिना।
 – 
Mad Physicist
21 मई 2018, 06:12
यह महान है! लेकिन मैं केवल जहां गिनती> सी प्रिंट करना चुन सकता हूं? इसलिए जब मैं c = 1, (0, 3) सेट करता हूं: 1 मुद्रित नहीं होता है
 – 
nvmnd
21 मई 2018, 06:19
Counter(i for i in counts if i[1] > c) जहां counts = Counter(tuple(i) for i in x)
 – 
Stephen Rauch
21 मई 2018, 06:22

numpy में आप np.unique का उपयोग कर सकते हैं, जैसे:

In []:
np.unique(x, axis=0, return_counts=True)

Out[]:
(array([[0, 1],
        [0, 2],
        [0, 3]]), array([2, 2, 1]))

यदि आप उन्हें संक्षिप्त करना चाहते हैं तो आप zip() का उपयोग कर सकते हैं, जैसे:

In []:
list(zip(*np.unique(x, axis=0, return_counts=True)))

Out[]:
[(array([0, 1]), 2), (array([0, 2]), 2), (array([0, 3]), 1)]
2
AChampion 21 मई 2018, 06:11

यदि आप शुद्ध सुन्न समाधान की तलाश में हैं:

In [12]: import numpy as np

In [13]: x = np.array([[0, 1], [0, 1], [0, 2], [0, 2], [0, 3]])

In [14]: np.unique(x, axis=0, return_counts=True)
Out[14]: 
(array([[0, 1],
        [0, 2],
        [0, 3]]), array([2, 2, 1]))
1
Akavall 21 मई 2018, 06:11

निम्नलिखित कोड इसे हल करेगा

print({str(i):x.count(i) for i in x})
0
InAFlash 21 मई 2018, 06:10
मैंने इसे चलाया और [2, 2, 2, 2, 1] दोनों अजगर 2.7 और अजगर 3.5 में मिला।
 – 
Helium_1s2
21 मई 2018, 06:06
जो प्रत्येक तत्व के लिए गिनती देता है
 – 
InAFlash
21 मई 2018, 06:06
लेकिन ऐसा नहीं है जो ओपी चाहता है। ओपी count = [0, 1] = 2, [0, 2] = 2, [0, 3] = 1 या कुछ इसी तरह की तलाश में था।
 – 
Helium_1s2
21 मई 2018, 06:07
अब यह [([0, 1], 2), ([0, 1], 2), ([0, 2], 2), ([0, 2], 2), ([0, 3], 1)] आउटपुट करता है। अभी भी वास्तव में वह नहीं है जो ओपी ने मांगा था।
 – 
Helium_1s2
21 मई 2018, 06:09
क्यों str(i)? सिर्फ i ही क्यों नहीं?
 – 
Mad Physicist
21 मई 2018, 06:14

तुम कोशिश कर सकते हो:

<मजबूत>1. उपयोग .count:


result = set((tuple(item), x.count(item)) for item in x)
print(result)

परिणाम:

{((0, 1), 2), ((0, 2), 2), ((0, 3), 1)}

<मजबूत>2. उपयोग defaultdict:


from collections import defaultdict

result = defaultdict(int)
for item in x:
    result[tuple(item)] += 1
    
print(dict(result))

परिणाम:

{(0, 1): 2, (0, 3): 1, (0, 2): 2}

<मजबूत>3. उपयोग Counter:


from collections import Counter

result = list(Counter(map(tuple, x)).items())
print(result)

परिणाम:

[((0, 1), 2), ((0, 3), 1), ((0, 2), 2)]
0
Community 20 जून 2020, 12:12