我正在寻找一种方法来计算元素在列表中出现的次数。
我找到了一种方法,但是我正在寻找一种有效的方法。
示例:
查找数字import paramiko
import psycopg2
from tendo import singleton
import os
import inspect
import re
import sys
import logging
SECTION_SRC_STAR = "DEFAULT"
SSH_HOST = 'name.com'
SSH_USERNAME = 'root'
#SSH_KEYFILE = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile(inspect.currentframe()))[0], "ssh.key")))
SSH_KEYFILE ="/Users/sandeep/Documents/ssh_pub"
SSH_DIR = '/opt/prod_odoo_out/carrierfiles/dhl/4/export/'
SSH_PORT = 22
SSH_MASK = 'file_pattern.*\.csv'
DSN = "dbname='postgres' user='postgres' host='localhost' password='postgres' port='5432'"
TABLE_NAME = 'staging.dhl_tracking_details'
conn = psycopg2.connect(DSN)
print("Database connected...")
conn.set_client_encoding('latin-1')
cur = conn.cursor()
cur.execute("SET datestyle='German'")
ssh = paramiko.SSHClient()
t = paramiko.Transport((SSH_HOST, SSH_PORT))
pk = paramiko.RSAKey.from_private_key(open('/Users/sandeep/Documents/ssh_pub/id_rsa'))
t.connect(username=SSH_USERNAME,pkey=pk)
print("SFTP Connected...")
try:
sftp = paramiko.SFTPClient.from_transport(t)
sftp = t.open_sftp_client()
print("SFTP Client : Open")
except Exception as e:
msg = "Error connecting via ssh: %s" % e
raise paramiko.SSHException(msg)
XT = "*.csv"
for filename in sftp.listdir(SSH_DIR):
print(filename)
#if re.match(SSH_MASK, filename):
print("entered loop")
path = '/%s/%s' % (SSH_DIR, filename)
fobj = sftp.file(SSH_DIR+filename, 'rb')
#cur.execute('TRUNCATE TABLE %s' % TABLE_NAME)
sql = "COPY %s FROM STDIN WITH DELIMITER AS ';' csv header"
table = 'staging.dhl_tracking_details'
cur.copy_expert(sql=sql % table, file=fobj)
conn.commit()
t.close()
在列表5
中出现的次数。
l
预期结果为l = [1, 1, 3, 4, 5, 5, 5, 5]
。
答案 0 :(得分:3)
有很多方法:
list.count
(最简单,最好的方法是只关心一个元素):print(l.count(5))
collections.Counter
(如果您关心所有元素,也非常简单,最好):print(Counter(l)[5])
len
使用列表推导:print(len([i for i in l if i == 5]))
sum
一起使用:print(sum(i == 5 for i in l))
答案 1 :(得分:3)
使用list.count
:
>>> l = [1, 1, 3, 4, 5, 5, 5, 5]
>>> l.count(5)
4
要查找列表中是否有5
:
>>> l = [1, 1, 3, 4, 5, 5, 5, 5]
>>> bool(l.count(5))
True
答案 2 :(得分:1)
一种方法是使用collections.Counter
:
from collections import Counter
l = [1, 1, 3, 4, 5, 5, 5, 5] # find the number of 5
c = Counter(l)
print(c[5]) # 4
如果您想知道其他项目的出现次数,它将比l.count(5)
更有效率。 (如果您只关心一项,效率会降低)。
答案 3 :(得分:0)
很简单
只要做:
l.index(5);