精华内容
下载资源
问答
  • 背景: 一个有2百多万行测试文件,按行统计得出不重复行内容及各自数量. 集合 lineset = set() 再读取每一行后 linetmp = f.readline(),使用2个方法处理。...方法1:直接 lineset.add(linetmp

    背景:

    • 一个有2百多万行的测试文件,按行统计得出不重复行内容及各自的数量. 集合 lineset = set()
    • 再读取每一行后 linetmp = f.readline(),使用4个方法处理。见下面的代码
    • win10, anaconda 4.8.3, python 3.8.3

    结果

    • test_add_if() 用的时间最短。
    • 也就是, 不了解效率的情况下,使用一般的判断流程图,即可得到最佳效率的小程序。(对很多数据来说。数据少了,也没人在乎效率了)
    #
    #  comparing time difference between set().add(newitem) and
    #  if newitem not in list, then add to set().add(newitem)
    #  conclusion: test_add_if() is the best way for 2M+ lines check.
    #
    
    test_set = set()
    test_file = "test_set_if.dxf"
    
    
    def set_add_directly():
        global test_set
        with open(test_file, 'r') as f:
            line_tmp = f.readline()
            while line_tmp:
                test_set.add(line_tmp)
                line_tmp = f.readline()
    
    
    def set_add_if():
        global test_set
        with open(test_file,'r') as f:
            line_tmp = f.readline()
            while line_tmp:
                if line_tmp not in test_set:
                    test_set.add(line_tmp)
                line_tmp = f.readline()
    
    
    def set_line_split():
        global test_set
        with open(test_file, 'r') as f:
            lines = f.readlines()
            linelist = [line.split for line in lines]
            test_set = set(linelist)
        #  print('set function:', test_set, flush=True)
    
    
    def set_f(): # there is \n for each element. more time is needed.
        global test_set
        with open(test_file,'r') as f:
            test_set = set (f.readlines())
    
    
    # main
    if __name__ == '__main__':
        from timeit import Timer
        timer1 = Timer('set_add_directly()', 'from __main__ import set_add_directly')
        t1 = timer1.timeit(1) # one round is more than 1s. so it is timeit(1) not 10000.
        timer2 = Timer('set_add_if()', 'from __main__ import set_add_if')
        t2 = timer2.timeit(1)
        timer3 = Timer('set_line_split()', 'from __main__ import set_line_split')
        t3 = timer3.timeit(1)
        timer4 = Timer('set_f()', 'from __main__ import set_f')
        t4 = timer4.timeit(1)
        print('set_add_directly - set_add_if:', t1-t2, flush=True)
        print('set_add_directly - set_line_split:', t1-t3, flush=True)
        print('set_line_split - set_add_if:', t3-t2, flush=True)
        print('set_f - set_add_if:', t4-t2, flush=True)
    
    • 其中一次的结果:
      ---------- Python ----------
      set_add_directly - set_add_if: 0.06032050000000011
      set_add_directly - set_line_split: -0.24342030000000003
      set_line_split - set_add_if: 0.30374080000000014
      set_f - set_add_if: 0.10101979999999977

    Output completed (3 sec consumed) - Normal Termination

    展开全文
  • >>> s = set('abc') >>> s {'c', 'b', 'a'} >>> s.add('de') >>> s {'c', 'b', 'de', 'a'} >>> s.update('fg') ...如上面代码所示,add将括号内字符作为一个整体加入集合中,而uptate将括号内字
    >>> s = set('abc')
    >>> s
    {'c', 'b', 'a'}
    >>> s.add('de')
    >>> s
    {'c', 'b', 'de', 'a'}
    >>> s.update('fg')
    >>> s
    {'g', 'de', 'a', 'c', 'b', 'f'}

    >>> 

    如上面代码所示,add将括号内字符作为一个整体加入集合中,而uptate将括号内字符拆成单个对象加入集合中

    展开全文
  • 关于集合的add方法

    2014-11-07 17:22:29
    我在一段代码中,调用ArrayList的add()方法集合中添加一个对象book,确定book对象在添加前的那一刻不为空,集合也是空的,但是会发生空指针异常,这是为什么?
  • Java集合类Set的add方法妙用

    千次阅读 2017-08-24 00:40:30
    关于这个Set方法的妙用,主要在于Set集合的add方法。 我们知道Set集合是可以去重的,就是没有相同的元素。在执行add方法时候,如果这个元素已经在set中存在,那么就返回false,否则返回true。 所以,我们可以根据...

    关于这个Set方法的妙用,主要在于Set集合的add方法。

    我们知道Set集合是可以去重的,就是没有相同的元素。在执行add方法时候,如果这个元素已经在set中存在,那么就返回false,否则返回true。

    所以,我们可以根据返回值,来确定当前添加的元素是否已经在set中存在。

    这个是在leetcode做一道数独问题时候,碰到的,感觉很不错。

    原题:https://leetcode.com/problems/valid-sudoku/description/

    这个问题,是判断一个9*9的格子,是不是有效的数独。

    解决方法如下

    class Solution {
    public boolean isValidSudoku(char[][] board) {
        for(int i = 0; i<9; i++){
            HashSet<Character> rows = new HashSet<Character>();
            HashSet<Character> columns = new HashSet<Character>();
            HashSet<Character> cube = new HashSet<Character>();
            for (int j = 0; j < 9;j++){
                if(board[i][j]!='.' && !rows.add(board[i][j]))
                    return false;
                if(board[j][i]!='.' && !columns.add(board[j][i]))
                    return false;
                int RowIndex = 3*(i/3);
                int ColIndex = 3*(i%3);
                if(board[RowIndex + j/3][ColIndex + j%3]!='.' && !cube.add(board[RowIndex + j/3][ColIndex + j%3]))
                    return false;
            }
        }
        return true;
    }
    }



    展开全文
  • List集合的add()方法是添加单独的元素进行存储,而addAll()方法是将指定的collection集合所有的元素添加到当前List集合中。 **注意:**当前List集合追加的元素的个数即为指定colection集合中元素的大小。 ...

    List集合中add()方法和addAll()方法的区别

    简单来说

    List集合中的add()方法是添加单独的元素进行存储,而addAll()方法是将指定的collection集合所有的元素添加到当前List集合中。
    **注意:**当前List集合追加的元素的个数即为指定colection集合中元素的大小。

    展开全文
  • C#集合的Add与AddRange方法

    千次阅读 2020-06-22 16:15:29
    比如ArrayList,其Add(继承自接口IList)和AddRange方法可用于想集合中添加元素。 代码示例: (1)Add:添加单个元素 ArrayList myAL = new ArrayList(); myAL.Add( “The” ); myAL.Add( “quick” ); myAL.Add( ...
  • 分别在fro循环内外new一个对象,然后在循环中将对象加入集合中,两种方法产生结果不同。 在for循环内new一个对象,并添加进list中,与添加数值结果没有差别。 在for循环外new一个对象,并添加进list中,无论...
  • //这里调用是对象hashCode()方法 // This function ensures that hashCodes that differ only by // constant multiples at each bit position have a bounded // number of collisions (approximately 8 ...
  • //这里调用是对象hashCode()方法 // This function ensures that hashCodes that differ only by // constant multiples at each bit position have a bounded // number of collisions (approximately 8 ...
  • 在C#的List集合操作中,有时候需要将符合条件的对象添加到已有List集合中的末尾,此时就需要使用到List集合的Add方法,Add方法的作用为将对应的元素添加到List集合末尾,Add方法签名为void Add(T item),T代表List...
  • 1、T是引用类型时,在循环外边已经new了一个对象,相当于这个对象地址在内存空间已经开辟出来了,保存到了固定位置,这时候我们使用add方法时,会增加值个数,但引用地址不变,所以后面值会覆盖掉前面值。...
  • TreeSet集合的add()方法的源码 --------------------------------------- interface Collection { ... } interface Set extends Collection { ... } --------------------------------------- class ...
  • //集合的方法:add与addAll,clear等方法 import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; public class CollectionDemo { public static void main(String[] args) {...
  • 说起LinkedList我们先说说他底层实现,...在说add方法之前我们先看一个Node结点类(内部类),以免后面不知道Node是什么: private static class Node<E> { //存储当前结点数据 E item; //记录下一
  • 两个方法都可以向集合中添加元素,可在使用上有差别。 ①从可添加元素来说:add()只可以添加不可变元素,如数字,字符串,元组,否则报错;而update()可以添加字符串、列表、元组、字典等可迭代元素,若添加...
  • List集合add方法覆盖原来内容问题:今天写了一波逻辑,觉得没问题,list.add(xx)时候,xx我debug时候看着数据没问题,但是list.add进去之后发现数据全部都一样解决: 问题:今天写了一波逻辑,觉得没问题,list...
  • HashSet中的add方法 源代码如下: public boolean add(E e) { return map.put(e, PRESENT)==null; } 由源代码(HashSet类中add方法)可以看出PRESENT是常量类型(由fina修饰,全部大写),map是HashMap类型的:...
  • add方法用于向集合列表中添加对象。 语法1 用于在列表尾部插入指定元素。如果List集合对象由于调用add方法而发生更改,则返回true;否则返回false。add(Ee)e:要添加到列表中元素。 实例 public static void ...
  • Set集合中使用add方法添加对象

    万次阅读 2017-07-30 13:01:15
    (1)、使用add()方法向set集合中添加对象 1)、如果Set集合中已经给定包含相同对象时,则不改变原来Set集合。 语法 boolean add(E e)  返回值:如果Set集合中不包含要添加对象,则添加对象并返回...
  • 一、HashMap类中hash(Object key)方法分析 由于在上一篇博客中已详细分析过该方法,此处不再赘述。...二、详述HashSet集合add()方法存储自定义类型对象执行过程 下面是自定义类代码: public ...
  • public synchronized boolean add(E e) { modCount++; //elementCount + 1表示当前数组最后一个元素位置下一个位置 ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = e; return ...
  • 我们经常会遍历 list集合,在遍历过程中,如果在遍历过程中添加了 add() 或者 addAll() 方法修改了遍历list列表,那么会报错. 代码演示: List<Integer> list = new ArrayList<Integer>(); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,362
精华内容 3,344
关键字:

集合的add方法